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/PassRegistry.h"
44 #include "llvm/Support/IRBuilder.h"
55 * The top-level container for all LLVM global data. See the LLVMContext class.
57 typedef struct LLVMOpaqueContext *LLVMContextRef;
60 * The top-level container for all other LLVM Intermediate Representation (IR)
61 * objects. See the llvm::Module class.
63 typedef struct LLVMOpaqueModule *LLVMModuleRef;
66 * Each value in the LLVM IR has a type, an LLVMTypeRef. See the llvm::Type
69 typedef struct LLVMOpaqueType *LLVMTypeRef;
71 typedef struct LLVMOpaqueValue *LLVMValueRef;
72 typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
73 typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
75 /* Interface used to provide a module to JIT or interpreter. This is now just a
76 * synonym for llvm::Module, but we have to keep using the different type to
77 * keep binary compatibility.
79 typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
81 /* Used to provide a module to JIT or interpreter.
82 * See the llvm::MemoryBuffer class.
84 typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
86 /** See the llvm::PassManagerBase class. */
87 typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
89 /** See the llvm::PassRegistry class. */
90 typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
92 /** Used to get the users and usees of a Value. See the llvm::Use class. */
93 typedef struct LLVMOpaqueUse *LLVMUseRef;
96 LLVMZExtAttribute = 1<<0,
97 LLVMSExtAttribute = 1<<1,
98 LLVMNoReturnAttribute = 1<<2,
99 LLVMInRegAttribute = 1<<3,
100 LLVMStructRetAttribute = 1<<4,
101 LLVMNoUnwindAttribute = 1<<5,
102 LLVMNoAliasAttribute = 1<<6,
103 LLVMByValAttribute = 1<<7,
104 LLVMNestAttribute = 1<<8,
105 LLVMReadNoneAttribute = 1<<9,
106 LLVMReadOnlyAttribute = 1<<10,
107 LLVMNoInlineAttribute = 1<<11,
108 LLVMAlwaysInlineAttribute = 1<<12,
109 LLVMOptimizeForSizeAttribute = 1<<13,
110 LLVMStackProtectAttribute = 1<<14,
111 LLVMStackProtectReqAttribute = 1<<15,
112 LLVMAlignment = 31<<16,
113 LLVMNoCaptureAttribute = 1<<21,
114 LLVMNoRedZoneAttribute = 1<<22,
115 LLVMNoImplicitFloatAttribute = 1<<23,
116 LLVMNakedAttribute = 1<<24,
117 LLVMInlineHintAttribute = 1<<25,
118 LLVMStackAlignment = 7<<26
122 /* Terminator Instructions */
128 /* removed 6 due to API changes */
131 /* Standard Binary Operators */
145 /* Logical Operators */
153 /* Memory Operators */
157 LLVMGetElementPtr = 29,
173 /* Other Operators */
182 LLVMExtractElement = 50,
183 LLVMInsertElement = 51,
184 LLVMShuffleVector = 52,
185 LLVMExtractValue = 53,
186 LLVMInsertValue = 54,
188 /* Atomic operators */
190 LLVMAtomicCmpXchg = 56,
193 /* Exception Handling Operators */
199 LLVMVoidTypeKind, /**< type with no size */
200 LLVMFloatTypeKind, /**< 32 bit floating point type */
201 LLVMDoubleTypeKind, /**< 64 bit floating point type */
202 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
203 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
204 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
205 LLVMLabelTypeKind, /**< Labels */
206 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
207 LLVMFunctionTypeKind, /**< Functions */
208 LLVMStructTypeKind, /**< Structures */
209 LLVMArrayTypeKind, /**< Arrays */
210 LLVMPointerTypeKind, /**< Pointers */
211 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
212 LLVMMetadataTypeKind, /**< Metadata */
213 LLVMX86_MMXTypeKind /**< X86 MMX */
217 LLVMExternalLinkage, /**< Externally visible function */
218 LLVMAvailableExternallyLinkage,
219 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
220 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
222 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
223 LLVMWeakODRLinkage, /**< Same, but only replaced by something
225 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
226 LLVMInternalLinkage, /**< Rename collisions when linking (static
228 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
229 LLVMDLLImportLinkage, /**< Function to be imported from DLL */
230 LLVMDLLExportLinkage, /**< Function to be accessible from DLL */
231 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
232 LLVMGhostLinkage, /**< Obsolete */
233 LLVMCommonLinkage, /**< Tentative definitions */
234 LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
235 LLVMLinkerPrivateWeakLinkage, /**< Like LinkerPrivate, but is weak. */
236 LLVMLinkerPrivateWeakDefAutoLinkage /**< Like LinkerPrivateWeak, but possibly
241 LLVMDefaultVisibility, /**< The GV is visible */
242 LLVMHiddenVisibility, /**< The GV is hidden */
243 LLVMProtectedVisibility /**< The GV is protected */
248 LLVMFastCallConv = 8,
249 LLVMColdCallConv = 9,
250 LLVMX86StdcallCallConv = 64,
251 LLVMX86FastcallCallConv = 65
255 LLVMIntEQ = 32, /**< equal */
256 LLVMIntNE, /**< not equal */
257 LLVMIntUGT, /**< unsigned greater than */
258 LLVMIntUGE, /**< unsigned greater or equal */
259 LLVMIntULT, /**< unsigned less than */
260 LLVMIntULE, /**< unsigned less or equal */
261 LLVMIntSGT, /**< signed greater than */
262 LLVMIntSGE, /**< signed greater or equal */
263 LLVMIntSLT, /**< signed less than */
264 LLVMIntSLE /**< signed less or equal */
268 LLVMRealPredicateFalse, /**< Always false (always folded) */
269 LLVMRealOEQ, /**< True if ordered and equal */
270 LLVMRealOGT, /**< True if ordered and greater than */
271 LLVMRealOGE, /**< True if ordered and greater than or equal */
272 LLVMRealOLT, /**< True if ordered and less than */
273 LLVMRealOLE, /**< True if ordered and less than or equal */
274 LLVMRealONE, /**< True if ordered and operands are unequal */
275 LLVMRealORD, /**< True if ordered (no nans) */
276 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
277 LLVMRealUEQ, /**< True if unordered or equal */
278 LLVMRealUGT, /**< True if unordered or greater than */
279 LLVMRealUGE, /**< True if unordered, greater than, or equal */
280 LLVMRealULT, /**< True if unordered or less than */
281 LLVMRealULE, /**< True if unordered, less than, or equal */
282 LLVMRealUNE, /**< True if unordered or not equal */
283 LLVMRealPredicateTrue /**< Always true (always folded) */
286 void LLVMInitializeCore(LLVMPassRegistryRef R);
289 /*===-- Error handling ----------------------------------------------------===*/
291 void LLVMDisposeMessage(char *Message);
294 /*===-- Contexts ----------------------------------------------------------===*/
296 /* Create and destroy contexts. */
297 LLVMContextRef LLVMContextCreate(void);
298 LLVMContextRef LLVMGetGlobalContext(void);
299 void LLVMContextDispose(LLVMContextRef C);
301 unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
303 unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
305 /*===-- Modules -----------------------------------------------------------===*/
307 /* Create and destroy modules. */
308 /** See llvm::Module::Module. */
309 LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
310 LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
313 /** See llvm::Module::~Module. */
314 void LLVMDisposeModule(LLVMModuleRef M);
316 /** Data layout. See Module::getDataLayout. */
317 const char *LLVMGetDataLayout(LLVMModuleRef M);
318 void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
320 /** Target triple. See Module::getTargetTriple. */
321 const char *LLVMGetTarget(LLVMModuleRef M);
322 void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
324 /** See Module::dump. */
325 void LLVMDumpModule(LLVMModuleRef M);
327 /** See Module::setModuleInlineAsm. */
328 void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
330 /** See Module::getContext. */
331 LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
333 /*===-- Types -------------------------------------------------------------===*/
335 /* LLVM types conform to the following hierarchy:
350 /** See llvm::LLVMTypeKind::getTypeID. */
351 LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
353 /** See llvm::LLVMType::getContext. */
354 LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
356 /* Operations on integer types */
357 LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
358 LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
359 LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
360 LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
361 LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
362 LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
364 LLVMTypeRef LLVMInt1Type(void);
365 LLVMTypeRef LLVMInt8Type(void);
366 LLVMTypeRef LLVMInt16Type(void);
367 LLVMTypeRef LLVMInt32Type(void);
368 LLVMTypeRef LLVMInt64Type(void);
369 LLVMTypeRef LLVMIntType(unsigned NumBits);
370 unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
372 /* Operations on real types */
373 LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
374 LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
375 LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
376 LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
377 LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
379 LLVMTypeRef LLVMFloatType(void);
380 LLVMTypeRef LLVMDoubleType(void);
381 LLVMTypeRef LLVMX86FP80Type(void);
382 LLVMTypeRef LLVMFP128Type(void);
383 LLVMTypeRef LLVMPPCFP128Type(void);
385 /* Operations on function types */
386 LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
387 LLVMTypeRef *ParamTypes, unsigned ParamCount,
389 LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
390 LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
391 unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
392 void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
394 /* Operations on struct types */
395 LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
396 unsigned ElementCount, LLVMBool Packed);
397 LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
399 LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
400 void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
401 unsigned ElementCount, LLVMBool Packed);
403 unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
404 void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
405 LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
406 LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
408 LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
410 /* Operations on array, pointer, and vector types (sequence types) */
411 LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
412 LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
413 LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
415 LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
416 unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
417 unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
418 unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
420 /* Operations on other types */
421 LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
422 LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
423 LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
425 LLVMTypeRef LLVMVoidType(void);
426 LLVMTypeRef LLVMLabelType(void);
427 LLVMTypeRef LLVMX86MMXType(void);
429 /*===-- Values ------------------------------------------------------------===*/
431 /* The bulk of LLVM's object model consists of values, which comprise a very
432 * rich type hierarchy.
435 #define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
441 macro(ConstantAggregateZero) \
442 macro(ConstantArray) \
443 macro(ConstantExpr) \
446 macro(ConstantPointerNull) \
447 macro(ConstantStruct) \
448 macro(ConstantVector) \
452 macro(GlobalVariable) \
455 macro(BinaryOperator) \
457 macro(IntrinsicInst) \
458 macro(DbgInfoIntrinsic) \
459 macro(DbgDeclareInst) \
460 macro(EHSelectorInst) \
461 macro(MemIntrinsic) \
468 macro(ExtractElementInst) \
469 macro(GetElementPtrInst) \
470 macro(InsertElementInst) \
471 macro(InsertValueInst) \
474 macro(ShuffleVectorInst) \
476 macro(TerminatorInst) \
481 macro(UnreachableInst) \
483 macro(UnaryInstruction) \
491 macro(IntToPtrInst) \
492 macro(PtrToIntInst) \
498 macro(ExtractValueInst) \
502 /* Operations on all values */
503 LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
504 const char *LLVMGetValueName(LLVMValueRef Val);
505 void LLVMSetValueName(LLVMValueRef Val, const char *Name);
506 void LLVMDumpValue(LLVMValueRef Val);
507 void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
508 int LLVMHasMetadata(LLVMValueRef Val);
509 LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
510 void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
512 /* Conversion functions. Return the input value if it is an instance of the
513 specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */
514 #define LLVM_DECLARE_VALUE_CAST(name) \
515 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
516 LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
518 /* Operations on Uses */
519 LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
520 LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
521 LLVMValueRef LLVMGetUser(LLVMUseRef U);
522 LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
524 /* Operations on Users */
525 LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
526 void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
527 int LLVMGetNumOperands(LLVMValueRef Val);
529 /* Operations on constants of any type */
530 LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
531 LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
532 LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
533 LLVMBool LLVMIsConstant(LLVMValueRef Val);
534 LLVMBool LLVMIsNull(LLVMValueRef Val);
535 LLVMBool LLVMIsUndef(LLVMValueRef Val);
536 LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
538 /* Operations on metadata */
539 LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
541 LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
542 LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
544 LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
546 /* Operations on scalar constants */
547 LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
548 LLVMBool SignExtend);
549 LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
551 const uint64_t Words[]);
552 LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
554 LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
555 unsigned SLen, uint8_t Radix);
556 LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
557 LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
558 LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
560 unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
561 long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
564 /* Operations on composite constants */
565 LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
566 unsigned Length, LLVMBool DontNullTerminate);
567 LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
568 LLVMValueRef *ConstantVals,
569 unsigned Count, LLVMBool Packed);
571 LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
572 LLVMBool DontNullTerminate);
573 LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
574 LLVMValueRef *ConstantVals, unsigned Length);
575 LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
577 LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
578 LLVMValueRef *ConstantVals,
580 LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
582 /* Constant expressions */
583 LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
584 LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
585 LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
586 LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
587 LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
588 LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
589 LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
590 LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
591 LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
592 LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
593 LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
594 LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
595 LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
596 LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
597 LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
598 LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
599 LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
600 LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
601 LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
602 LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
603 LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
604 LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
605 LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
606 LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
607 LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
608 LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
609 LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
610 LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
611 LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
612 LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
613 LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
614 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
615 LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
616 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
617 LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
618 LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
619 LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
620 LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
621 LLVMValueRef *ConstantIndices, unsigned NumIndices);
622 LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
623 LLVMValueRef *ConstantIndices,
624 unsigned NumIndices);
625 LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
626 LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
627 LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
628 LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
629 LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
630 LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
631 LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
632 LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
633 LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
634 LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
635 LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
636 LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
637 LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
639 LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
641 LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
643 LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
645 LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
647 LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
648 LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
649 LLVMValueRef ConstantIfTrue,
650 LLVMValueRef ConstantIfFalse);
651 LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
652 LLVMValueRef IndexConstant);
653 LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
654 LLVMValueRef ElementValueConstant,
655 LLVMValueRef IndexConstant);
656 LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
657 LLVMValueRef VectorBConstant,
658 LLVMValueRef MaskConstant);
659 LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
661 LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
662 LLVMValueRef ElementValueConstant,
663 unsigned *IdxList, unsigned NumIdx);
664 LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
665 const char *AsmString, const char *Constraints,
666 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
667 LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
669 /* Operations on global variables, functions, and aliases (globals) */
670 LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
671 LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
672 LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
673 void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
674 const char *LLVMGetSection(LLVMValueRef Global);
675 void LLVMSetSection(LLVMValueRef Global, const char *Section);
676 LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
677 void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
678 unsigned LLVMGetAlignment(LLVMValueRef Global);
679 void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
681 /* Operations on global variables */
682 LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
683 LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
685 unsigned AddressSpace);
686 LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
687 LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
688 LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
689 LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
690 LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
691 void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
692 LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
693 void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
694 LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
695 void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
696 LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
697 void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
699 /* Operations on aliases */
700 LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
703 /* Operations on functions */
704 LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
705 LLVMTypeRef FunctionTy);
706 LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
707 LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
708 LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
709 LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
710 LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
711 void LLVMDeleteFunction(LLVMValueRef Fn);
712 unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
713 unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
714 void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
715 const char *LLVMGetGC(LLVMValueRef Fn);
716 void LLVMSetGC(LLVMValueRef Fn, const char *Name);
717 void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
718 LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
719 void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
721 /* Operations on parameters */
722 unsigned LLVMCountParams(LLVMValueRef Fn);
723 void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
724 LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
725 LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
726 LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
727 LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
728 LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
729 LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
730 void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
731 void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
732 LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
733 void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
735 /* Operations on basic blocks */
736 LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
737 LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
738 LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
739 LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
740 unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
741 void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
742 LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
743 LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
744 LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
745 LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
746 LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
748 LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
751 LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
752 LLVMBasicBlockRef BB,
755 LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
756 LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
758 void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
760 void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
761 void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
763 /* Operations on instructions */
764 LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
765 LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
766 LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
767 LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
768 LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
770 /* Operations on call sites */
771 void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
772 unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
773 void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
774 void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
776 void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
779 /* Operations on call instructions (only) */
780 LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
781 void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
783 /* Operations on phi nodes */
784 void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
785 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
786 unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
787 LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
788 LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
790 /*===-- Instruction builders ----------------------------------------------===*/
792 /* An instruction builder represents a point within a basic block, and is the
793 * exclusive means of building instructions using the C interface.
796 LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
797 LLVMBuilderRef LLVMCreateBuilder(void);
798 void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
800 void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
801 void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
802 LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
803 void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
804 void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
805 void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
807 void LLVMDisposeBuilder(LLVMBuilderRef Builder);
810 void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
811 LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
812 void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
815 LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
816 LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
817 LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
819 LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
820 LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
821 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
822 LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
823 LLVMBasicBlockRef Else, unsigned NumCases);
824 LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
826 LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
827 LLVMValueRef *Args, unsigned NumArgs,
828 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
830 LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
831 LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
833 /* Add a case to the switch instruction */
834 void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
835 LLVMBasicBlockRef Dest);
837 /* Add a destination to the indirectbr instruction */
838 void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
841 LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
843 LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
845 LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
847 LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
849 LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
851 LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
853 LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
855 LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
857 LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
859 LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
861 LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
863 LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
865 LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
867 LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
869 LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
871 LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
873 LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
875 LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
877 LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
879 LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
881 LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
883 LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
885 LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
887 LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
889 LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
891 LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
892 LLVMValueRef LHS, LLVMValueRef RHS,
894 LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
895 LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
897 LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
899 LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
900 LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
903 LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
904 LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
905 LLVMValueRef Val, const char *Name);
906 LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
907 LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
908 LLVMValueRef Val, const char *Name);
909 LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
910 LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
912 LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
913 LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
914 LLVMValueRef *Indices, unsigned NumIndices,
916 LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
917 LLVMValueRef *Indices, unsigned NumIndices,
919 LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
920 unsigned Idx, const char *Name);
921 LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
923 LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
927 LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
928 LLVMTypeRef DestTy, const char *Name);
929 LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
930 LLVMTypeRef DestTy, const char *Name);
931 LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
932 LLVMTypeRef DestTy, const char *Name);
933 LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
934 LLVMTypeRef DestTy, const char *Name);
935 LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
936 LLVMTypeRef DestTy, const char *Name);
937 LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
938 LLVMTypeRef DestTy, const char *Name);
939 LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
940 LLVMTypeRef DestTy, const char *Name);
941 LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
942 LLVMTypeRef DestTy, const char *Name);
943 LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
944 LLVMTypeRef DestTy, const char *Name);
945 LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
946 LLVMTypeRef DestTy, const char *Name);
947 LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
948 LLVMTypeRef DestTy, const char *Name);
949 LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
950 LLVMTypeRef DestTy, const char *Name);
951 LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
952 LLVMTypeRef DestTy, const char *Name);
953 LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
954 LLVMTypeRef DestTy, const char *Name);
955 LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
956 LLVMTypeRef DestTy, const char *Name);
957 LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
958 LLVMTypeRef DestTy, const char *Name);
959 LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
960 LLVMTypeRef DestTy, const char *Name);
961 LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
962 LLVMTypeRef DestTy, const char *Name);
963 LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
964 LLVMTypeRef DestTy, const char *Name);
967 LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
968 LLVMValueRef LHS, LLVMValueRef RHS,
970 LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
971 LLVMValueRef LHS, LLVMValueRef RHS,
974 /* Miscellaneous instructions */
975 LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
976 LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
977 LLVMValueRef *Args, unsigned NumArgs,
979 LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
980 LLVMValueRef Then, LLVMValueRef Else,
982 LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
984 LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
985 LLVMValueRef Index, const char *Name);
986 LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
987 LLVMValueRef EltVal, LLVMValueRef Index,
989 LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
990 LLVMValueRef V2, LLVMValueRef Mask,
992 LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
993 unsigned Index, const char *Name);
994 LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
995 LLVMValueRef EltVal, unsigned Index,
998 LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
1000 LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
1002 LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
1003 LLVMValueRef RHS, const char *Name);
1006 /*===-- Module providers --------------------------------------------------===*/
1008 /* Changes the type of M so it can be passed to FunctionPassManagers and the
1009 * JIT. They take ModuleProviders for historical reasons.
1011 LLVMModuleProviderRef
1012 LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
1014 /* Destroys the module M.
1016 void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
1019 /*===-- Memory buffers ----------------------------------------------------===*/
1021 LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
1022 LLVMMemoryBufferRef *OutMemBuf,
1024 LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
1026 void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
1028 /*===-- Pass Registry -----------------------------------------------------===*/
1030 /** Return the global pass registry, for use with initialization functions.
1031 See llvm::PassRegistry::getPassRegistry. */
1032 LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
1034 /*===-- Pass Managers -----------------------------------------------------===*/
1036 /** Constructs a new whole-module pass pipeline. This type of pipeline is
1037 suitable for link-time optimization and whole-module transformations.
1038 See llvm::PassManager::PassManager. */
1039 LLVMPassManagerRef LLVMCreatePassManager(void);
1041 /** Constructs a new function-by-function pass pipeline over the module
1042 provider. It does not take ownership of the module provider. This type of
1043 pipeline is suitable for code generation and JIT compilation tasks.
1044 See llvm::FunctionPassManager::FunctionPassManager. */
1045 LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
1047 /** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
1048 LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
1050 /** Initializes, executes on the provided module, and finalizes all of the
1051 passes scheduled in the pass manager. Returns 1 if any of the passes
1052 modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
1053 LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
1055 /** Initializes all of the function passes scheduled in the function pass
1056 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1057 See llvm::FunctionPassManager::doInitialization. */
1058 LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
1060 /** Executes all of the function passes scheduled in the function pass manager
1061 on the provided function. Returns 1 if any of the passes modified the
1062 function, false otherwise.
1063 See llvm::FunctionPassManager::run(Function&). */
1064 LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
1066 /** Finalizes all of the function passes scheduled in in the function pass
1067 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1068 See llvm::FunctionPassManager::doFinalization. */
1069 LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
1071 /** Frees the memory of a pass pipeline. For function pipelines, does not free
1072 the module provider.
1073 See llvm::PassManagerBase::~PassManagerBase. */
1074 void LLVMDisposePassManager(LLVMPassManagerRef PM);
1082 class PassManagerBase;
1084 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1085 inline ty *unwrap(ref P) { \
1086 return reinterpret_cast<ty*>(P); \
1089 inline ref wrap(const ty *P) { \
1090 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
1093 #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \
1094 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1096 template<typename T> \
1097 inline T *unwrap(ref P) { \
1098 return cast<T>(unwrap(P)); \
1101 #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \
1102 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1104 template<typename T> \
1105 inline T *unwrap(ref P) { \
1106 T *Q = (T*)unwrap(P); \
1107 assert(Q && "Invalid cast!"); \
1111 DEFINE_ISA_CONVERSION_FUNCTIONS (Type, LLVMTypeRef )
1112 DEFINE_ISA_CONVERSION_FUNCTIONS (Value, LLVMValueRef )
1113 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef )
1114 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef )
1115 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef )
1116 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef )
1117 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef )
1118 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use, LLVMUseRef )
1119 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef )
1120 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassRegistry, LLVMPassRegistryRef )
1121 /* LLVMModuleProviderRef exists for historical reasons, but now just holds a
1124 inline Module *unwrap(LLVMModuleProviderRef MP) {
1125 return reinterpret_cast<Module*>(MP);
1128 #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
1129 #undef DEFINE_ISA_CONVERSION_FUNCTIONS
1130 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
1132 /* Specialized opaque context conversions.
1134 inline LLVMContext **unwrap(LLVMContextRef* Tys) {
1135 return reinterpret_cast<LLVMContext**>(Tys);
1138 inline LLVMContextRef *wrap(const LLVMContext **Tys) {
1139 return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys));
1142 /* Specialized opaque type conversions.
1144 inline Type **unwrap(LLVMTypeRef* Tys) {
1145 return reinterpret_cast<Type**>(Tys);
1148 inline LLVMTypeRef *wrap(Type **Tys) {
1149 return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
1152 /* Specialized opaque value conversions.
1154 inline Value **unwrap(LLVMValueRef *Vals) {
1155 return reinterpret_cast<Value**>(Vals);
1158 template<typename T>
1159 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
1161 for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
1165 return reinterpret_cast<T**>(Vals);
1168 inline LLVMValueRef *wrap(const Value **Vals) {
1169 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
1173 #endif /* !defined(__cplusplus) */
1175 #endif /* !defined(LLVM_C_CORE_H) */