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
125 /* Terminator Instructions */
131 /* removed 6 due to API changes */
134 /* Standard Binary Operators */
148 /* Logical Operators */
156 /* Memory Operators */
160 LLVMGetElementPtr = 29,
176 /* Other Operators */
185 LLVMExtractElement = 50,
186 LLVMInsertElement = 51,
187 LLVMShuffleVector = 52,
188 LLVMExtractValue = 53,
189 LLVMInsertValue = 54,
191 /* Atomic operators */
193 LLVMAtomicCmpXchg = 56,
196 /* Exception Handling Operators */
203 LLVMVoidTypeKind, /**< type with no size */
204 LLVMFloatTypeKind, /**< 32 bit floating point type */
205 LLVMDoubleTypeKind, /**< 64 bit floating point type */
206 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
207 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
208 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
209 LLVMLabelTypeKind, /**< Labels */
210 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
211 LLVMFunctionTypeKind, /**< Functions */
212 LLVMStructTypeKind, /**< Structures */
213 LLVMArrayTypeKind, /**< Arrays */
214 LLVMPointerTypeKind, /**< Pointers */
215 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
216 LLVMMetadataTypeKind, /**< Metadata */
217 LLVMX86_MMXTypeKind /**< X86 MMX */
221 LLVMExternalLinkage, /**< Externally visible function */
222 LLVMAvailableExternallyLinkage,
223 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
224 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
226 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
227 LLVMWeakODRLinkage, /**< Same, but only replaced by something
229 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
230 LLVMInternalLinkage, /**< Rename collisions when linking (static
232 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
233 LLVMDLLImportLinkage, /**< Function to be imported from DLL */
234 LLVMDLLExportLinkage, /**< Function to be accessible from DLL */
235 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
236 LLVMGhostLinkage, /**< Obsolete */
237 LLVMCommonLinkage, /**< Tentative definitions */
238 LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
239 LLVMLinkerPrivateWeakLinkage, /**< Like LinkerPrivate, but is weak. */
240 LLVMLinkerPrivateWeakDefAutoLinkage /**< Like LinkerPrivateWeak, but possibly
245 LLVMDefaultVisibility, /**< The GV is visible */
246 LLVMHiddenVisibility, /**< The GV is hidden */
247 LLVMProtectedVisibility /**< The GV is protected */
252 LLVMFastCallConv = 8,
253 LLVMColdCallConv = 9,
254 LLVMX86StdcallCallConv = 64,
255 LLVMX86FastcallCallConv = 65
259 LLVMIntEQ = 32, /**< equal */
260 LLVMIntNE, /**< not equal */
261 LLVMIntUGT, /**< unsigned greater than */
262 LLVMIntUGE, /**< unsigned greater or equal */
263 LLVMIntULT, /**< unsigned less than */
264 LLVMIntULE, /**< unsigned less or equal */
265 LLVMIntSGT, /**< signed greater than */
266 LLVMIntSGE, /**< signed greater or equal */
267 LLVMIntSLT, /**< signed less than */
268 LLVMIntSLE /**< signed less or equal */
272 LLVMRealPredicateFalse, /**< Always false (always folded) */
273 LLVMRealOEQ, /**< True if ordered and equal */
274 LLVMRealOGT, /**< True if ordered and greater than */
275 LLVMRealOGE, /**< True if ordered and greater than or equal */
276 LLVMRealOLT, /**< True if ordered and less than */
277 LLVMRealOLE, /**< True if ordered and less than or equal */
278 LLVMRealONE, /**< True if ordered and operands are unequal */
279 LLVMRealORD, /**< True if ordered (no nans) */
280 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
281 LLVMRealUEQ, /**< True if unordered or equal */
282 LLVMRealUGT, /**< True if unordered or greater than */
283 LLVMRealUGE, /**< True if unordered, greater than, or equal */
284 LLVMRealULT, /**< True if unordered or less than */
285 LLVMRealULE, /**< True if unordered, less than, or equal */
286 LLVMRealUNE, /**< True if unordered or not equal */
287 LLVMRealPredicateTrue /**< Always true (always folded) */
291 LLVMLandingPadCatch, /**< A catch clause */
292 LLVMLandingPadFilter /**< A filter clause */
293 } LLVMLandingPadClauseTy;
295 void LLVMInitializeCore(LLVMPassRegistryRef R);
298 /*===-- Error handling ----------------------------------------------------===*/
300 void LLVMDisposeMessage(char *Message);
303 /*===-- Contexts ----------------------------------------------------------===*/
305 /* Create and destroy contexts. */
306 LLVMContextRef LLVMContextCreate(void);
307 LLVMContextRef LLVMGetGlobalContext(void);
308 void LLVMContextDispose(LLVMContextRef C);
310 unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
312 unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
314 /*===-- Modules -----------------------------------------------------------===*/
316 /* Create and destroy modules. */
317 /** See llvm::Module::Module. */
318 LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
319 LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
322 /** See llvm::Module::~Module. */
323 void LLVMDisposeModule(LLVMModuleRef M);
325 /** Data layout. See Module::getDataLayout. */
326 const char *LLVMGetDataLayout(LLVMModuleRef M);
327 void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
329 /** Target triple. See Module::getTargetTriple. */
330 const char *LLVMGetTarget(LLVMModuleRef M);
331 void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
333 /** See Module::dump. */
334 void LLVMDumpModule(LLVMModuleRef M);
336 /** See Module::setModuleInlineAsm. */
337 void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
339 /** See Module::getContext. */
340 LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
342 /*===-- Types -------------------------------------------------------------===*/
344 /* LLVM types conform to the following hierarchy:
359 /** See llvm::LLVMTypeKind::getTypeID. */
360 LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
361 LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
363 /** See llvm::LLVMType::getContext. */
364 LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
366 /* Operations on integer types */
367 LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
368 LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
369 LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
370 LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
371 LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
372 LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
374 LLVMTypeRef LLVMInt1Type(void);
375 LLVMTypeRef LLVMInt8Type(void);
376 LLVMTypeRef LLVMInt16Type(void);
377 LLVMTypeRef LLVMInt32Type(void);
378 LLVMTypeRef LLVMInt64Type(void);
379 LLVMTypeRef LLVMIntType(unsigned NumBits);
380 unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
382 /* Operations on real types */
383 LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
384 LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
385 LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
386 LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
387 LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
389 LLVMTypeRef LLVMFloatType(void);
390 LLVMTypeRef LLVMDoubleType(void);
391 LLVMTypeRef LLVMX86FP80Type(void);
392 LLVMTypeRef LLVMFP128Type(void);
393 LLVMTypeRef LLVMPPCFP128Type(void);
395 /* Operations on function types */
396 LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
397 LLVMTypeRef *ParamTypes, unsigned ParamCount,
399 LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
400 LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
401 unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
402 void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
404 /* Operations on struct types */
405 LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
406 unsigned ElementCount, LLVMBool Packed);
407 LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
409 LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
410 const char *LLVMGetStructName(LLVMTypeRef Ty);
411 void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
412 unsigned ElementCount, LLVMBool Packed);
414 unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
415 void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
416 LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
417 LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
419 LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
421 /* Operations on array, pointer, and vector types (sequence types) */
422 LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
423 LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
424 LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
426 LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
427 unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
428 unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
429 unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
431 /* Operations on other types */
432 LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
433 LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
434 LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
436 LLVMTypeRef LLVMVoidType(void);
437 LLVMTypeRef LLVMLabelType(void);
438 LLVMTypeRef LLVMX86MMXType(void);
440 /*===-- Values ------------------------------------------------------------===*/
442 /* The bulk of LLVM's object model consists of values, which comprise a very
443 * rich type hierarchy.
446 #define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
452 macro(ConstantAggregateZero) \
453 macro(ConstantArray) \
454 macro(ConstantExpr) \
457 macro(ConstantPointerNull) \
458 macro(ConstantStruct) \
459 macro(ConstantVector) \
463 macro(GlobalVariable) \
466 macro(BinaryOperator) \
468 macro(IntrinsicInst) \
469 macro(DbgInfoIntrinsic) \
470 macro(DbgDeclareInst) \
471 macro(EHSelectorInst) \
472 macro(MemIntrinsic) \
479 macro(ExtractElementInst) \
480 macro(GetElementPtrInst) \
481 macro(InsertElementInst) \
482 macro(InsertValueInst) \
483 macro(LandingPadInst) \
486 macro(ShuffleVectorInst) \
488 macro(TerminatorInst) \
493 macro(UnreachableInst) \
495 macro(UnaryInstruction) \
503 macro(IntToPtrInst) \
504 macro(PtrToIntInst) \
510 macro(ExtractValueInst) \
514 /* Operations on all values */
515 LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
516 const char *LLVMGetValueName(LLVMValueRef Val);
517 void LLVMSetValueName(LLVMValueRef Val, const char *Name);
518 void LLVMDumpValue(LLVMValueRef Val);
519 void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
520 int LLVMHasMetadata(LLVMValueRef Val);
521 LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
522 void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
524 /* Conversion functions. Return the input value if it is an instance of the
525 specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */
526 #define LLVM_DECLARE_VALUE_CAST(name) \
527 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
528 LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
530 /* Operations on Uses */
531 LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
532 LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
533 LLVMValueRef LLVMGetUser(LLVMUseRef U);
534 LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
536 /* Operations on Users */
537 LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
538 void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
539 int LLVMGetNumOperands(LLVMValueRef Val);
541 /* Operations on constants of any type */
542 LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
543 LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
544 LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
545 LLVMBool LLVMIsConstant(LLVMValueRef Val);
546 LLVMBool LLVMIsNull(LLVMValueRef Val);
547 LLVMBool LLVMIsUndef(LLVMValueRef Val);
548 LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
550 /* Operations on metadata */
551 LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
553 LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
554 LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
556 LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
557 const char *LLVMGetMDString(LLVMValueRef V, unsigned* Len);
558 int LLVMGetMDNodeNumOperands(LLVMValueRef V);
559 LLVMValueRef *LLVMGetMDNodeOperand(LLVMValueRef V, unsigned i);
560 unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name);
561 void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest);
563 /* Operations on scalar constants */
564 LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
565 LLVMBool SignExtend);
566 LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
568 const uint64_t Words[]);
569 LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
571 LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
572 unsigned SLen, uint8_t Radix);
573 LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
574 LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
575 LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
577 unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
578 long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
581 /* Operations on composite constants */
582 LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
583 unsigned Length, LLVMBool DontNullTerminate);
584 LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
585 LLVMValueRef *ConstantVals,
586 unsigned Count, LLVMBool Packed);
588 LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
589 LLVMBool DontNullTerminate);
590 LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
591 LLVMValueRef *ConstantVals, unsigned Length);
592 LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
594 LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
595 LLVMValueRef *ConstantVals,
597 LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
599 /* Constant expressions */
600 LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
601 LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
602 LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
603 LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
604 LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
605 LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
606 LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
607 LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
608 LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
609 LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
610 LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
611 LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
612 LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
613 LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
614 LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
615 LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
616 LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
617 LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
618 LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
619 LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
620 LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
621 LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
622 LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
623 LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
624 LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
625 LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
626 LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
627 LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
628 LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
629 LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
630 LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
631 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
632 LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
633 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
634 LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
635 LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
636 LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
637 LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
638 LLVMValueRef *ConstantIndices, unsigned NumIndices);
639 LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
640 LLVMValueRef *ConstantIndices,
641 unsigned NumIndices);
642 LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
643 LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
644 LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
645 LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
646 LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
647 LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
648 LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
649 LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
650 LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
651 LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
652 LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
653 LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
654 LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
656 LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
658 LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
660 LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
662 LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
664 LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
665 LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
666 LLVMValueRef ConstantIfTrue,
667 LLVMValueRef ConstantIfFalse);
668 LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
669 LLVMValueRef IndexConstant);
670 LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
671 LLVMValueRef ElementValueConstant,
672 LLVMValueRef IndexConstant);
673 LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
674 LLVMValueRef VectorBConstant,
675 LLVMValueRef MaskConstant);
676 LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
678 LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
679 LLVMValueRef ElementValueConstant,
680 unsigned *IdxList, unsigned NumIdx);
681 LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
682 const char *AsmString, const char *Constraints,
683 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
684 LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
686 /* Operations on global variables, functions, and aliases (globals) */
687 LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
688 LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
689 LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
690 void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
691 const char *LLVMGetSection(LLVMValueRef Global);
692 void LLVMSetSection(LLVMValueRef Global, const char *Section);
693 LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
694 void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
695 unsigned LLVMGetAlignment(LLVMValueRef Global);
696 void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
698 /* Operations on global variables */
699 LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
700 LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
702 unsigned AddressSpace);
703 LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
704 LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
705 LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
706 LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
707 LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
708 void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
709 LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
710 void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
711 LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
712 void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
713 LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
714 void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
716 /* Operations on aliases */
717 LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
720 /* Operations on functions */
721 LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
722 LLVMTypeRef FunctionTy);
723 LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
724 LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
725 LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
726 LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
727 LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
728 void LLVMDeleteFunction(LLVMValueRef Fn);
729 unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
730 unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
731 void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
732 const char *LLVMGetGC(LLVMValueRef Fn);
733 void LLVMSetGC(LLVMValueRef Fn, const char *Name);
734 void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
735 LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
736 void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
738 /* Operations on parameters */
739 unsigned LLVMCountParams(LLVMValueRef Fn);
740 void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
741 LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
742 LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
743 LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
744 LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
745 LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
746 LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
747 void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
748 void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
749 LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
750 void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
752 /* Operations on basic blocks */
753 LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
754 LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
755 LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
756 LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
757 LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
758 unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
759 void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
760 LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
761 LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
762 LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
763 LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
764 LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
766 LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
769 LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
770 LLVMBasicBlockRef BB,
773 LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
774 LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
776 void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
777 void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
779 void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
780 void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
782 LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
783 LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
785 /* Operations on instructions */
786 LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
787 LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
788 LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
789 void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
790 LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
792 /* Operations on call sites */
793 void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
794 unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
795 void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
796 void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
798 void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
801 /* Operations on call instructions (only) */
802 LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
803 void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
805 /* Operations on switch instructions (only) */
806 LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
808 /* Operations on phi nodes */
809 void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
810 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
811 unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
812 LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
813 LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
815 /*===-- Instruction builders ----------------------------------------------===*/
817 /* An instruction builder represents a point within a basic block, and is the
818 * exclusive means of building instructions using the C interface.
821 LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
822 LLVMBuilderRef LLVMCreateBuilder(void);
823 void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
825 void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
826 void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
827 LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
828 void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
829 void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
830 void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
832 void LLVMDisposeBuilder(LLVMBuilderRef Builder);
835 void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
836 LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
837 void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
840 LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
841 LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
842 LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
844 LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
845 LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
846 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
847 LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
848 LLVMBasicBlockRef Else, unsigned NumCases);
849 LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
851 LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
852 LLVMValueRef *Args, unsigned NumArgs,
853 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
855 LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
856 LLVMValueRef PersFn, unsigned NumClauses,
858 LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
859 LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
861 /* Add a case to the switch instruction */
862 void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
863 LLVMBasicBlockRef Dest);
865 /* Add a destination to the indirectbr instruction */
866 void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
868 /* Add a catch or filter clause to the landingpad instruction */
869 void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
871 /* Set the 'cleanup' flag in the landingpad instruction */
872 void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
875 LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
877 LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
879 LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
881 LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
883 LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
885 LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
887 LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
889 LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
891 LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
893 LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
895 LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
897 LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
899 LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
901 LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
903 LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
905 LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
907 LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
909 LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
911 LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
913 LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
915 LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
917 LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
919 LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
921 LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
923 LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
925 LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
926 LLVMValueRef LHS, LLVMValueRef RHS,
928 LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
929 LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
931 LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
933 LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
934 LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
937 LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
938 LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
939 LLVMValueRef Val, const char *Name);
940 LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
941 LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
942 LLVMValueRef Val, const char *Name);
943 LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
944 LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
946 LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
947 LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
948 LLVMValueRef *Indices, unsigned NumIndices,
950 LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
951 LLVMValueRef *Indices, unsigned NumIndices,
953 LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
954 unsigned Idx, const char *Name);
955 LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
957 LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
961 LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
962 LLVMTypeRef DestTy, const char *Name);
963 LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
964 LLVMTypeRef DestTy, const char *Name);
965 LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
966 LLVMTypeRef DestTy, const char *Name);
967 LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
968 LLVMTypeRef DestTy, const char *Name);
969 LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
970 LLVMTypeRef DestTy, const char *Name);
971 LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
972 LLVMTypeRef DestTy, const char *Name);
973 LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
974 LLVMTypeRef DestTy, const char *Name);
975 LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
976 LLVMTypeRef DestTy, const char *Name);
977 LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
978 LLVMTypeRef DestTy, const char *Name);
979 LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
980 LLVMTypeRef DestTy, const char *Name);
981 LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
982 LLVMTypeRef DestTy, const char *Name);
983 LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
984 LLVMTypeRef DestTy, const char *Name);
985 LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
986 LLVMTypeRef DestTy, const char *Name);
987 LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
988 LLVMTypeRef DestTy, const char *Name);
989 LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
990 LLVMTypeRef DestTy, const char *Name);
991 LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
992 LLVMTypeRef DestTy, const char *Name);
993 LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
994 LLVMTypeRef DestTy, const char *Name);
995 LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
996 LLVMTypeRef DestTy, const char *Name);
997 LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
998 LLVMTypeRef DestTy, const char *Name);
1001 LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
1002 LLVMValueRef LHS, LLVMValueRef RHS,
1004 LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
1005 LLVMValueRef LHS, LLVMValueRef RHS,
1008 /* Miscellaneous instructions */
1009 LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
1010 LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
1011 LLVMValueRef *Args, unsigned NumArgs,
1013 LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
1014 LLVMValueRef Then, LLVMValueRef Else,
1016 LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
1018 LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
1019 LLVMValueRef Index, const char *Name);
1020 LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
1021 LLVMValueRef EltVal, LLVMValueRef Index,
1023 LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
1024 LLVMValueRef V2, LLVMValueRef Mask,
1026 LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
1027 unsigned Index, const char *Name);
1028 LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
1029 LLVMValueRef EltVal, unsigned Index,
1032 LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
1034 LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
1036 LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
1037 LLVMValueRef RHS, const char *Name);
1040 /*===-- Module providers --------------------------------------------------===*/
1042 /* Changes the type of M so it can be passed to FunctionPassManagers and the
1043 * JIT. They take ModuleProviders for historical reasons.
1045 LLVMModuleProviderRef
1046 LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
1048 /* Destroys the module M.
1050 void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
1053 /*===-- Memory buffers ----------------------------------------------------===*/
1055 LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
1056 LLVMMemoryBufferRef *OutMemBuf,
1058 LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
1060 void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
1062 /*===-- Pass Registry -----------------------------------------------------===*/
1064 /** Return the global pass registry, for use with initialization functions.
1065 See llvm::PassRegistry::getPassRegistry. */
1066 LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
1068 /*===-- Pass Managers -----------------------------------------------------===*/
1070 /** Constructs a new whole-module pass pipeline. This type of pipeline is
1071 suitable for link-time optimization and whole-module transformations.
1072 See llvm::PassManager::PassManager. */
1073 LLVMPassManagerRef LLVMCreatePassManager(void);
1075 /** Constructs a new function-by-function pass pipeline over the module
1076 provider. It does not take ownership of the module provider. This type of
1077 pipeline is suitable for code generation and JIT compilation tasks.
1078 See llvm::FunctionPassManager::FunctionPassManager. */
1079 LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
1081 /** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
1082 LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
1084 /** Initializes, executes on the provided module, and finalizes all of the
1085 passes scheduled in the pass manager. Returns 1 if any of the passes
1086 modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
1087 LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
1089 /** Initializes all of the function passes scheduled in the function pass
1090 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1091 See llvm::FunctionPassManager::doInitialization. */
1092 LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
1094 /** Executes all of the function passes scheduled in the function pass manager
1095 on the provided function. Returns 1 if any of the passes modified the
1096 function, false otherwise.
1097 See llvm::FunctionPassManager::run(Function&). */
1098 LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
1100 /** Finalizes all of the function passes scheduled in in the function pass
1101 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1102 See llvm::FunctionPassManager::doFinalization. */
1103 LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
1105 /** Frees the memory of a pass pipeline. For function pipelines, does not free
1106 the module provider.
1107 See llvm::PassManagerBase::~PassManagerBase. */
1108 void LLVMDisposePassManager(LLVMPassManagerRef PM);
1116 class PassManagerBase;
1118 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1119 inline ty *unwrap(ref P) { \
1120 return reinterpret_cast<ty*>(P); \
1123 inline ref wrap(const ty *P) { \
1124 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
1127 #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \
1128 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1130 template<typename T> \
1131 inline T *unwrap(ref P) { \
1132 return cast<T>(unwrap(P)); \
1135 #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \
1136 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1138 template<typename T> \
1139 inline T *unwrap(ref P) { \
1140 T *Q = (T*)unwrap(P); \
1141 assert(Q && "Invalid cast!"); \
1145 DEFINE_ISA_CONVERSION_FUNCTIONS (Type, LLVMTypeRef )
1146 DEFINE_ISA_CONVERSION_FUNCTIONS (Value, LLVMValueRef )
1147 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef )
1148 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef )
1149 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef )
1150 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef )
1151 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef )
1152 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use, LLVMUseRef )
1153 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef )
1154 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassRegistry, LLVMPassRegistryRef )
1155 /* LLVMModuleProviderRef exists for historical reasons, but now just holds a
1158 inline Module *unwrap(LLVMModuleProviderRef MP) {
1159 return reinterpret_cast<Module*>(MP);
1162 #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
1163 #undef DEFINE_ISA_CONVERSION_FUNCTIONS
1164 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
1166 /* Specialized opaque context conversions.
1168 inline LLVMContext **unwrap(LLVMContextRef* Tys) {
1169 return reinterpret_cast<LLVMContext**>(Tys);
1172 inline LLVMContextRef *wrap(const LLVMContext **Tys) {
1173 return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys));
1176 /* Specialized opaque type conversions.
1178 inline Type **unwrap(LLVMTypeRef* Tys) {
1179 return reinterpret_cast<Type**>(Tys);
1182 inline LLVMTypeRef *wrap(Type **Tys) {
1183 return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
1186 /* Specialized opaque value conversions.
1188 inline Value **unwrap(LLVMValueRef *Vals) {
1189 return reinterpret_cast<Value**>(Vals);
1192 template<typename T>
1193 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
1195 for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
1199 return reinterpret_cast<T**>(Vals);
1202 inline LLVMValueRef *wrap(const Value **Vals) {
1203 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
1207 #endif /* !defined(__cplusplus) */
1209 #endif /* !defined(LLVM_C_CORE_H) */