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,
119 LLVMReturnsTwice = 1 << 29,
120 LLVMUWTable = 1 << 30,
121 LLVMNonLazyBind = 1 << 31
123 // FIXME: This attribute is currently not included in the C API as
124 // a temporary measure until the API/ABI impact to the C API is understood
125 // and the path forward agreed upon.
126 //LLVMAddressSafety = 1ULL << 32
130 /* Terminator Instructions */
136 /* removed 6 due to API changes */
139 /* Standard Binary Operators */
153 /* Logical Operators */
161 /* Memory Operators */
165 LLVMGetElementPtr = 29,
181 /* Other Operators */
190 LLVMExtractElement = 50,
191 LLVMInsertElement = 51,
192 LLVMShuffleVector = 52,
193 LLVMExtractValue = 53,
194 LLVMInsertValue = 54,
196 /* Atomic operators */
198 LLVMAtomicCmpXchg = 56,
201 /* Exception Handling Operators */
210 LLVMVoidTypeKind, /**< type with no size */
211 LLVMHalfTypeKind, /**< 16 bit floating point type */
212 LLVMFloatTypeKind, /**< 32 bit floating point type */
213 LLVMDoubleTypeKind, /**< 64 bit floating point type */
214 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
215 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
216 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
217 LLVMLabelTypeKind, /**< Labels */
218 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
219 LLVMFunctionTypeKind, /**< Functions */
220 LLVMStructTypeKind, /**< Structures */
221 LLVMArrayTypeKind, /**< Arrays */
222 LLVMPointerTypeKind, /**< Pointers */
223 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
224 LLVMMetadataTypeKind, /**< Metadata */
225 LLVMX86_MMXTypeKind /**< X86 MMX */
229 LLVMExternalLinkage, /**< Externally visible function */
230 LLVMAvailableExternallyLinkage,
231 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
232 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
234 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
235 LLVMWeakODRLinkage, /**< Same, but only replaced by something
237 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
238 LLVMInternalLinkage, /**< Rename collisions when linking (static
240 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
241 LLVMDLLImportLinkage, /**< Function to be imported from DLL */
242 LLVMDLLExportLinkage, /**< Function to be accessible from DLL */
243 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
244 LLVMGhostLinkage, /**< Obsolete */
245 LLVMCommonLinkage, /**< Tentative definitions */
246 LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
247 LLVMLinkerPrivateWeakLinkage, /**< Like LinkerPrivate, but is weak. */
248 LLVMLinkerPrivateWeakDefAutoLinkage /**< Like LinkerPrivateWeak, but possibly
253 LLVMDefaultVisibility, /**< The GV is visible */
254 LLVMHiddenVisibility, /**< The GV is hidden */
255 LLVMProtectedVisibility /**< The GV is protected */
260 LLVMFastCallConv = 8,
261 LLVMColdCallConv = 9,
262 LLVMX86StdcallCallConv = 64,
263 LLVMX86FastcallCallConv = 65
267 LLVMIntEQ = 32, /**< equal */
268 LLVMIntNE, /**< not equal */
269 LLVMIntUGT, /**< unsigned greater than */
270 LLVMIntUGE, /**< unsigned greater or equal */
271 LLVMIntULT, /**< unsigned less than */
272 LLVMIntULE, /**< unsigned less or equal */
273 LLVMIntSGT, /**< signed greater than */
274 LLVMIntSGE, /**< signed greater or equal */
275 LLVMIntSLT, /**< signed less than */
276 LLVMIntSLE /**< signed less or equal */
280 LLVMRealPredicateFalse, /**< Always false (always folded) */
281 LLVMRealOEQ, /**< True if ordered and equal */
282 LLVMRealOGT, /**< True if ordered and greater than */
283 LLVMRealOGE, /**< True if ordered and greater than or equal */
284 LLVMRealOLT, /**< True if ordered and less than */
285 LLVMRealOLE, /**< True if ordered and less than or equal */
286 LLVMRealONE, /**< True if ordered and operands are unequal */
287 LLVMRealORD, /**< True if ordered (no nans) */
288 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
289 LLVMRealUEQ, /**< True if unordered or equal */
290 LLVMRealUGT, /**< True if unordered or greater than */
291 LLVMRealUGE, /**< True if unordered, greater than, or equal */
292 LLVMRealULT, /**< True if unordered or less than */
293 LLVMRealULE, /**< True if unordered, less than, or equal */
294 LLVMRealUNE, /**< True if unordered or not equal */
295 LLVMRealPredicateTrue /**< Always true (always folded) */
299 LLVMLandingPadCatch, /**< A catch clause */
300 LLVMLandingPadFilter /**< A filter clause */
301 } LLVMLandingPadClauseTy;
303 void LLVMInitializeCore(LLVMPassRegistryRef R);
306 /*===-- Error handling ----------------------------------------------------===*/
308 void LLVMDisposeMessage(char *Message);
311 /*===-- Contexts ----------------------------------------------------------===*/
313 /* Create and destroy contexts. */
314 LLVMContextRef LLVMContextCreate(void);
315 LLVMContextRef LLVMGetGlobalContext(void);
316 void LLVMContextDispose(LLVMContextRef C);
318 unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
320 unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
322 /*===-- Modules -----------------------------------------------------------===*/
324 /* Create and destroy modules. */
325 /** See llvm::Module::Module. */
326 LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
327 LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
330 /** See llvm::Module::~Module. */
331 void LLVMDisposeModule(LLVMModuleRef M);
333 /** Data layout. See Module::getDataLayout. */
334 const char *LLVMGetDataLayout(LLVMModuleRef M);
335 void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
337 /** Target triple. See Module::getTargetTriple. */
338 const char *LLVMGetTarget(LLVMModuleRef M);
339 void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
341 /** See Module::dump. */
342 void LLVMDumpModule(LLVMModuleRef M);
344 /** See Module::setModuleInlineAsm. */
345 void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
347 /** See Module::getContext. */
348 LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
350 /*===-- Types -------------------------------------------------------------===*/
352 /* LLVM types conform to the following hierarchy:
367 /** See llvm::LLVMTypeKind::getTypeID. */
368 LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
369 LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
371 /** See llvm::LLVMType::getContext. */
372 LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
374 /* Operations on integer types */
375 LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
376 LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
377 LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
378 LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
379 LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
380 LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
382 LLVMTypeRef LLVMInt1Type(void);
383 LLVMTypeRef LLVMInt8Type(void);
384 LLVMTypeRef LLVMInt16Type(void);
385 LLVMTypeRef LLVMInt32Type(void);
386 LLVMTypeRef LLVMInt64Type(void);
387 LLVMTypeRef LLVMIntType(unsigned NumBits);
388 unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
390 /* Operations on real types */
391 LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C);
392 LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
393 LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
394 LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
395 LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
396 LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
398 LLVMTypeRef LLVMHalfType(void);
399 LLVMTypeRef LLVMFloatType(void);
400 LLVMTypeRef LLVMDoubleType(void);
401 LLVMTypeRef LLVMX86FP80Type(void);
402 LLVMTypeRef LLVMFP128Type(void);
403 LLVMTypeRef LLVMPPCFP128Type(void);
405 /* Operations on function types */
406 LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
407 LLVMTypeRef *ParamTypes, unsigned ParamCount,
409 LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
410 LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
411 unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
412 void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
414 /* Operations on struct types */
415 LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
416 unsigned ElementCount, LLVMBool Packed);
417 LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
419 LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
420 const char *LLVMGetStructName(LLVMTypeRef Ty);
421 void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
422 unsigned ElementCount, LLVMBool Packed);
424 unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
425 void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
426 LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
427 LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
429 LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
431 /* Operations on array, pointer, and vector types (sequence types) */
432 LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
433 LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
434 LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
436 LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
437 unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
438 unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
439 unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
441 /* Operations on other types */
442 LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
443 LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
444 LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
446 LLVMTypeRef LLVMVoidType(void);
447 LLVMTypeRef LLVMLabelType(void);
448 LLVMTypeRef LLVMX86MMXType(void);
450 /*===-- Values ------------------------------------------------------------===*/
452 /* The bulk of LLVM's object model consists of values, which comprise a very
453 * rich type hierarchy.
456 #define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
464 macro(BlockAddress) \
465 macro(ConstantAggregateZero) \
466 macro(ConstantArray) \
467 macro(ConstantExpr) \
470 macro(ConstantPointerNull) \
471 macro(ConstantStruct) \
472 macro(ConstantVector) \
476 macro(GlobalVariable) \
479 macro(BinaryOperator) \
481 macro(IntrinsicInst) \
482 macro(DbgInfoIntrinsic) \
483 macro(DbgDeclareInst) \
484 macro(MemIntrinsic) \
491 macro(ExtractElementInst) \
492 macro(GetElementPtrInst) \
493 macro(InsertElementInst) \
494 macro(InsertValueInst) \
495 macro(LandingPadInst) \
498 macro(ShuffleVectorInst) \
500 macro(TerminatorInst) \
502 macro(IndirectBrInst) \
506 macro(UnreachableInst) \
508 macro(UnaryInstruction) \
516 macro(IntToPtrInst) \
517 macro(PtrToIntInst) \
523 macro(ExtractValueInst) \
527 /* Operations on all values */
528 LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
529 const char *LLVMGetValueName(LLVMValueRef Val);
530 void LLVMSetValueName(LLVMValueRef Val, const char *Name);
531 void LLVMDumpValue(LLVMValueRef Val);
532 void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
533 int LLVMHasMetadata(LLVMValueRef Val);
534 LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
535 void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
537 /* Conversion functions. Return the input value if it is an instance of the
538 specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */
539 #define LLVM_DECLARE_VALUE_CAST(name) \
540 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
541 LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
543 /* Operations on Uses */
544 LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
545 LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
546 LLVMValueRef LLVMGetUser(LLVMUseRef U);
547 LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
549 /* Operations on Users and metadata */
550 LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
551 void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
552 int LLVMGetNumOperands(LLVMValueRef Val);
554 /* Operations on constants of any type */
555 LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
556 LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
557 LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
558 LLVMBool LLVMIsConstant(LLVMValueRef Val);
559 LLVMBool LLVMIsNull(LLVMValueRef Val);
560 LLVMBool LLVMIsUndef(LLVMValueRef Val);
561 LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
563 /* Operations on metadata */
564 LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
566 LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
567 LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
569 LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
570 const char *LLVMGetMDString(LLVMValueRef V, unsigned* Len);
571 unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name);
572 void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest);
573 void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char* name,
576 /* Operations on scalar constants */
577 LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
578 LLVMBool SignExtend);
579 LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
581 const uint64_t Words[]);
582 LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
584 LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
585 unsigned SLen, uint8_t Radix);
586 LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
587 LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
588 LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
590 unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
591 long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
594 /* Operations on composite constants */
595 LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
596 unsigned Length, LLVMBool DontNullTerminate);
597 LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
598 LLVMValueRef *ConstantVals,
599 unsigned Count, LLVMBool Packed);
601 LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
602 LLVMBool DontNullTerminate);
603 LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
604 LLVMValueRef *ConstantVals, unsigned Length);
605 LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
607 LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
608 LLVMValueRef *ConstantVals,
610 LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
612 /* Constant expressions */
613 LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
614 LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
615 LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
616 LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
617 LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
618 LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
619 LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
620 LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
621 LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
622 LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
623 LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
624 LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
625 LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
626 LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
627 LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
628 LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
629 LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
630 LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
631 LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
632 LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
633 LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
634 LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
635 LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
636 LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
637 LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
638 LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
639 LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
640 LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
641 LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
642 LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
643 LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
644 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
645 LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
646 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
647 LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
648 LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
649 LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
650 LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
651 LLVMValueRef *ConstantIndices, unsigned NumIndices);
652 LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
653 LLVMValueRef *ConstantIndices,
654 unsigned NumIndices);
655 LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
656 LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
657 LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
658 LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
659 LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
660 LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
661 LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
662 LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
663 LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
664 LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
665 LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
666 LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
667 LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
669 LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
671 LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
673 LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
675 LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
677 LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
678 LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
679 LLVMValueRef ConstantIfTrue,
680 LLVMValueRef ConstantIfFalse);
681 LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
682 LLVMValueRef IndexConstant);
683 LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
684 LLVMValueRef ElementValueConstant,
685 LLVMValueRef IndexConstant);
686 LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
687 LLVMValueRef VectorBConstant,
688 LLVMValueRef MaskConstant);
689 LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
691 LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
692 LLVMValueRef ElementValueConstant,
693 unsigned *IdxList, unsigned NumIdx);
694 LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
695 const char *AsmString, const char *Constraints,
696 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
697 LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
699 /* Operations on global variables, functions, and aliases (globals) */
700 LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
701 LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
702 LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
703 void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
704 const char *LLVMGetSection(LLVMValueRef Global);
705 void LLVMSetSection(LLVMValueRef Global, const char *Section);
706 LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
707 void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
708 unsigned LLVMGetAlignment(LLVMValueRef Global);
709 void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
711 /* Operations on global variables */
712 LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
713 LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
715 unsigned AddressSpace);
716 LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
717 LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
718 LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
719 LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
720 LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
721 void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
722 LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
723 void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
724 LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
725 void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
726 LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
727 void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
729 /* Operations on aliases */
730 LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
733 /* Operations on functions */
734 LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
735 LLVMTypeRef FunctionTy);
736 LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
737 LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
738 LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
739 LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
740 LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
741 void LLVMDeleteFunction(LLVMValueRef Fn);
742 unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
743 unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
744 void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
745 const char *LLVMGetGC(LLVMValueRef Fn);
746 void LLVMSetGC(LLVMValueRef Fn, const char *Name);
747 void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
748 LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
749 void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
751 /* Operations on parameters */
752 unsigned LLVMCountParams(LLVMValueRef Fn);
753 void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
754 LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
755 LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
756 LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
757 LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
758 LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
759 LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
760 void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
761 void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
762 LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
763 void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
765 /* Operations on basic blocks */
766 LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
767 LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
768 LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
769 LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
770 LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
771 unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
772 void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
773 LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
774 LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
775 LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
776 LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
777 LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
779 LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
782 LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
783 LLVMBasicBlockRef BB,
786 LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
787 LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
789 void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
790 void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
792 void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
793 void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
795 LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
796 LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
798 /* Operations on instructions */
799 LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
800 LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
801 LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
802 void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
803 LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst);
804 LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
806 /* Operations on call sites */
807 void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
808 unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
809 void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
810 void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
812 void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
815 /* Operations on call instructions (only) */
816 LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
817 void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
819 /* Operations on switch instructions (only) */
820 LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
822 /* Operations on phi nodes */
823 void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
824 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
825 unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
826 LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
827 LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
829 /*===-- Instruction builders ----------------------------------------------===*/
831 /* An instruction builder represents a point within a basic block, and is the
832 * exclusive means of building instructions using the C interface.
835 LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
836 LLVMBuilderRef LLVMCreateBuilder(void);
837 void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
839 void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
840 void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
841 LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
842 void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
843 void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
844 void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
846 void LLVMDisposeBuilder(LLVMBuilderRef Builder);
849 void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
850 LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
851 void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
854 LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
855 LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
856 LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
858 LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
859 LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
860 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
861 LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
862 LLVMBasicBlockRef Else, unsigned NumCases);
863 LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
865 LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
866 LLVMValueRef *Args, unsigned NumArgs,
867 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
869 LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
870 LLVMValueRef PersFn, unsigned NumClauses,
872 LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
873 LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
875 /* Add a case to the switch instruction */
876 void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
877 LLVMBasicBlockRef Dest);
879 /* Add a destination to the indirectbr instruction */
880 void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
882 /* Add a catch or filter clause to the landingpad instruction */
883 void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
885 /* Set the 'cleanup' flag in the landingpad instruction */
886 void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
889 LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
891 LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
893 LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
895 LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
897 LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
899 LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
901 LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
903 LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
905 LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
907 LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
909 LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
911 LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
913 LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
915 LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
917 LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
919 LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
921 LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
923 LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
925 LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
927 LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
929 LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
931 LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
933 LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
935 LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
937 LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
939 LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
940 LLVMValueRef LHS, LLVMValueRef RHS,
942 LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
943 LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
945 LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
947 LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
948 LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
951 LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
952 LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
953 LLVMValueRef Val, const char *Name);
954 LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
955 LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
956 LLVMValueRef Val, const char *Name);
957 LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
958 LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
960 LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
961 LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
962 LLVMValueRef *Indices, unsigned NumIndices,
964 LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
965 LLVMValueRef *Indices, unsigned NumIndices,
967 LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
968 unsigned Idx, const char *Name);
969 LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
971 LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
975 LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
976 LLVMTypeRef DestTy, const char *Name);
977 LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
978 LLVMTypeRef DestTy, const char *Name);
979 LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
980 LLVMTypeRef DestTy, const char *Name);
981 LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
982 LLVMTypeRef DestTy, const char *Name);
983 LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
984 LLVMTypeRef DestTy, const char *Name);
985 LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
986 LLVMTypeRef DestTy, const char *Name);
987 LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
988 LLVMTypeRef DestTy, const char *Name);
989 LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
990 LLVMTypeRef DestTy, const char *Name);
991 LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
992 LLVMTypeRef DestTy, const char *Name);
993 LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
994 LLVMTypeRef DestTy, const char *Name);
995 LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
996 LLVMTypeRef DestTy, const char *Name);
997 LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
998 LLVMTypeRef DestTy, const char *Name);
999 LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
1000 LLVMTypeRef DestTy, const char *Name);
1001 LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
1002 LLVMTypeRef DestTy, const char *Name);
1003 LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
1004 LLVMTypeRef DestTy, const char *Name);
1005 LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
1006 LLVMTypeRef DestTy, const char *Name);
1007 LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
1008 LLVMTypeRef DestTy, const char *Name);
1009 LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
1010 LLVMTypeRef DestTy, const char *Name);
1011 LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
1012 LLVMTypeRef DestTy, const char *Name);
1015 LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
1016 LLVMValueRef LHS, LLVMValueRef RHS,
1018 LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
1019 LLVMValueRef LHS, LLVMValueRef RHS,
1022 /* Miscellaneous instructions */
1023 LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
1024 LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
1025 LLVMValueRef *Args, unsigned NumArgs,
1027 LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
1028 LLVMValueRef Then, LLVMValueRef Else,
1030 LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
1032 LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
1033 LLVMValueRef Index, const char *Name);
1034 LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
1035 LLVMValueRef EltVal, LLVMValueRef Index,
1037 LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
1038 LLVMValueRef V2, LLVMValueRef Mask,
1040 LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
1041 unsigned Index, const char *Name);
1042 LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
1043 LLVMValueRef EltVal, unsigned Index,
1046 LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
1048 LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
1050 LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
1051 LLVMValueRef RHS, const char *Name);
1054 /*===-- Module providers --------------------------------------------------===*/
1056 /* Changes the type of M so it can be passed to FunctionPassManagers and the
1057 * JIT. They take ModuleProviders for historical reasons.
1059 LLVMModuleProviderRef
1060 LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
1062 /* Destroys the module M.
1064 void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
1067 /*===-- Memory buffers ----------------------------------------------------===*/
1069 LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
1070 LLVMMemoryBufferRef *OutMemBuf,
1072 LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
1074 void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
1076 /*===-- Pass Registry -----------------------------------------------------===*/
1078 /** Return the global pass registry, for use with initialization functions.
1079 See llvm::PassRegistry::getPassRegistry. */
1080 LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
1082 /*===-- Pass Managers -----------------------------------------------------===*/
1084 /** Constructs a new whole-module pass pipeline. This type of pipeline is
1085 suitable for link-time optimization and whole-module transformations.
1086 See llvm::PassManager::PassManager. */
1087 LLVMPassManagerRef LLVMCreatePassManager(void);
1089 /** Constructs a new function-by-function pass pipeline over the module
1090 provider. It does not take ownership of the module provider. This type of
1091 pipeline is suitable for code generation and JIT compilation tasks.
1092 See llvm::FunctionPassManager::FunctionPassManager. */
1093 LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
1095 /** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
1096 LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
1098 /** Initializes, executes on the provided module, and finalizes all of the
1099 passes scheduled in the pass manager. Returns 1 if any of the passes
1100 modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
1101 LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
1103 /** Initializes all of the function passes scheduled in the function pass
1104 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1105 See llvm::FunctionPassManager::doInitialization. */
1106 LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
1108 /** Executes all of the function passes scheduled in the function pass manager
1109 on the provided function. Returns 1 if any of the passes modified the
1110 function, false otherwise.
1111 See llvm::FunctionPassManager::run(Function&). */
1112 LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
1114 /** Finalizes all of the function passes scheduled in in the function pass
1115 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1116 See llvm::FunctionPassManager::doFinalization. */
1117 LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
1119 /** Frees the memory of a pass pipeline. For function pipelines, does not free
1120 the module provider.
1121 See llvm::PassManagerBase::~PassManagerBase. */
1122 void LLVMDisposePassManager(LLVMPassManagerRef PM);
1130 class PassManagerBase;
1132 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1133 inline ty *unwrap(ref P) { \
1134 return reinterpret_cast<ty*>(P); \
1137 inline ref wrap(const ty *P) { \
1138 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
1141 #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \
1142 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1144 template<typename T> \
1145 inline T *unwrap(ref P) { \
1146 return cast<T>(unwrap(P)); \
1149 #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \
1150 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1152 template<typename T> \
1153 inline T *unwrap(ref P) { \
1154 T *Q = (T*)unwrap(P); \
1155 assert(Q && "Invalid cast!"); \
1159 DEFINE_ISA_CONVERSION_FUNCTIONS (Type, LLVMTypeRef )
1160 DEFINE_ISA_CONVERSION_FUNCTIONS (Value, LLVMValueRef )
1161 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef )
1162 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef )
1163 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef )
1164 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef )
1165 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef )
1166 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use, LLVMUseRef )
1167 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef )
1168 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassRegistry, LLVMPassRegistryRef )
1169 /* LLVMModuleProviderRef exists for historical reasons, but now just holds a
1172 inline Module *unwrap(LLVMModuleProviderRef MP) {
1173 return reinterpret_cast<Module*>(MP);
1176 #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
1177 #undef DEFINE_ISA_CONVERSION_FUNCTIONS
1178 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
1180 /* Specialized opaque context conversions.
1182 inline LLVMContext **unwrap(LLVMContextRef* Tys) {
1183 return reinterpret_cast<LLVMContext**>(Tys);
1186 inline LLVMContextRef *wrap(const LLVMContext **Tys) {
1187 return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys));
1190 /* Specialized opaque type conversions.
1192 inline Type **unwrap(LLVMTypeRef* Tys) {
1193 return reinterpret_cast<Type**>(Tys);
1196 inline LLVMTypeRef *wrap(Type **Tys) {
1197 return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
1200 /* Specialized opaque value conversions.
1202 inline Value **unwrap(LLVMValueRef *Vals) {
1203 return reinterpret_cast<Value**>(Vals);
1206 template<typename T>
1207 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
1209 for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
1213 return reinterpret_cast<T**>(Vals);
1216 inline LLVMValueRef *wrap(const Value **Vals) {
1217 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
1221 #endif /* !defined(__cplusplus) */
1223 #endif /* !defined(LLVM_C_CORE_H) */