Core.h revision 212904
1/*===-- llvm-c/Core.h - Core Library C Interface ------------------*- C -*-===*\ 2|* *| 3|* The LLVM Compiler Infrastructure *| 4|* *| 5|* This file is distributed under the University of Illinois Open Source *| 6|* License. See LICENSE.TXT for details. *| 7|* *| 8|*===----------------------------------------------------------------------===*| 9|* *| 10|* This header declares the C interface to libLLVMCore.a, which implements *| 11|* the LLVM intermediate representation. *| 12|* *| 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). *| 21|* *| 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. *| 25|* *| 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. *| 30|* *| 31\*===----------------------------------------------------------------------===*/ 32 33#ifndef LLVM_C_CORE_H 34#define LLVM_C_CORE_H 35 36#include "llvm/System/DataTypes.h" 37 38#ifdef __cplusplus 39 40/* Need these includes to support the LLVM 'cast' template for the C++ 'wrap' 41 and 'unwrap' conversion functions. */ 42#include "llvm/Module.h" 43#include "llvm/Support/IRBuilder.h" 44 45extern "C" { 46#endif 47 48 49typedef int LLVMBool; 50 51/* Opaque types. */ 52 53/** 54 * The top-level container for all LLVM global data. See the LLVMContext class. 55 */ 56typedef struct LLVMOpaqueContext *LLVMContextRef; 57 58/** 59 * The top-level container for all other LLVM Intermediate Representation (IR) 60 * objects. See the llvm::Module class. 61 */ 62typedef struct LLVMOpaqueModule *LLVMModuleRef; 63 64/** 65 * Each value in the LLVM IR has a type, an LLVMTypeRef. See the llvm::Type 66 * class. 67 */ 68typedef struct LLVMOpaqueType *LLVMTypeRef; 69 70/** 71 * When building recursive types using LLVMRefineType, LLVMTypeRef values may 72 * become invalid; use LLVMTypeHandleRef to resolve this problem. See the 73 * llvm::AbstractTypeHolder class. 74 */ 75typedef struct LLVMOpaqueTypeHandle *LLVMTypeHandleRef; 76 77typedef struct LLVMOpaqueValue *LLVMValueRef; 78typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef; 79typedef struct LLVMOpaqueBuilder *LLVMBuilderRef; 80 81/* Interface used to provide a module to JIT or interpreter. This is now just a 82 * synonym for llvm::Module, but we have to keep using the different type to 83 * keep binary compatibility. 84 */ 85typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef; 86 87/* Used to provide a module to JIT or interpreter. 88 * See the llvm::MemoryBuffer class. 89 */ 90typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef; 91 92/** See the llvm::PassManagerBase class. */ 93typedef struct LLVMOpaquePassManager *LLVMPassManagerRef; 94 95/** Used to get the users and usees of a Value. See the llvm::Use class. */ 96typedef struct LLVMOpaqueUse *LLVMUseRef; 97 98typedef enum { 99 LLVMZExtAttribute = 1<<0, 100 LLVMSExtAttribute = 1<<1, 101 LLVMNoReturnAttribute = 1<<2, 102 LLVMInRegAttribute = 1<<3, 103 LLVMStructRetAttribute = 1<<4, 104 LLVMNoUnwindAttribute = 1<<5, 105 LLVMNoAliasAttribute = 1<<6, 106 LLVMByValAttribute = 1<<7, 107 LLVMNestAttribute = 1<<8, 108 LLVMReadNoneAttribute = 1<<9, 109 LLVMReadOnlyAttribute = 1<<10, 110 LLVMNoInlineAttribute = 1<<11, 111 LLVMAlwaysInlineAttribute = 1<<12, 112 LLVMOptimizeForSizeAttribute = 1<<13, 113 LLVMStackProtectAttribute = 1<<14, 114 LLVMStackProtectReqAttribute = 1<<15, 115 LLVMAlignment = 31<<16, 116 LLVMNoCaptureAttribute = 1<<21, 117 LLVMNoRedZoneAttribute = 1<<22, 118 LLVMNoImplicitFloatAttribute = 1<<23, 119 LLVMNakedAttribute = 1<<24, 120 LLVMInlineHintAttribute = 1<<25, 121 LLVMStackAlignment = 7<<26 122} LLVMAttribute; 123 124typedef enum { 125 /* Terminator Instructions */ 126 LLVMRet = 1, 127 LLVMBr = 2, 128 LLVMSwitch = 3, 129 LLVMIndirectBr = 4, 130 LLVMInvoke = 5, 131 LLVMUnwind = 6, 132 LLVMUnreachable = 7, 133 134 /* Standard Binary Operators */ 135 LLVMAdd = 8, 136 LLVMFAdd = 9, 137 LLVMSub = 10, 138 LLVMFSub = 11, 139 LLVMMul = 12, 140 LLVMFMul = 13, 141 LLVMUDiv = 14, 142 LLVMSDiv = 15, 143 LLVMFDiv = 16, 144 LLVMURem = 17, 145 LLVMSRem = 18, 146 LLVMFRem = 19, 147 148 /* Logical Operators */ 149 LLVMShl = 20, 150 LLVMLShr = 21, 151 LLVMAShr = 22, 152 LLVMAnd = 23, 153 LLVMOr = 24, 154 LLVMXor = 25, 155 156 /* Memory Operators */ 157 LLVMAlloca = 26, 158 LLVMLoad = 27, 159 LLVMStore = 28, 160 LLVMGetElementPtr = 29, 161 162 /* Cast Operators */ 163 LLVMTrunc = 30, 164 LLVMZExt = 31, 165 LLVMSExt = 32, 166 LLVMFPToUI = 33, 167 LLVMFPToSI = 34, 168 LLVMUIToFP = 35, 169 LLVMSIToFP = 36, 170 LLVMFPTrunc = 37, 171 LLVMFPExt = 38, 172 LLVMPtrToInt = 39, 173 LLVMIntToPtr = 40, 174 LLVMBitCast = 41, 175 176 /* Other Operators */ 177 LLVMICmp = 42, 178 LLVMFCmp = 43, 179 LLVMPHI = 44, 180 LLVMCall = 45, 181 LLVMSelect = 46, 182 /* UserOp1 */ 183 /* UserOp2 */ 184 LLVMVAArg = 49, 185 LLVMExtractElement = 50, 186 LLVMInsertElement = 51, 187 LLVMShuffleVector = 52, 188 LLVMExtractValue = 53, 189 LLVMInsertValue = 54 190} LLVMOpcode; 191 192typedef enum { 193 LLVMVoidTypeKind, /**< type with no size */ 194 LLVMFloatTypeKind, /**< 32 bit floating point type */ 195 LLVMDoubleTypeKind, /**< 64 bit floating point type */ 196 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */ 197 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/ 198 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */ 199 LLVMLabelTypeKind, /**< Labels */ 200 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */ 201 LLVMFunctionTypeKind, /**< Functions */ 202 LLVMStructTypeKind, /**< Structures */ 203 LLVMArrayTypeKind, /**< Arrays */ 204 LLVMPointerTypeKind, /**< Pointers */ 205 LLVMOpaqueTypeKind, /**< Opaque: type with unknown structure */ 206 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */ 207 LLVMMetadataTypeKind /**< Metadata */ 208} LLVMTypeKind; 209 210typedef enum { 211 LLVMExternalLinkage, /**< Externally visible function */ 212 LLVMAvailableExternallyLinkage, 213 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/ 214 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something 215 equivalent. */ 216 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */ 217 LLVMWeakODRLinkage, /**< Same, but only replaced by something 218 equivalent. */ 219 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */ 220 LLVMInternalLinkage, /**< Rename collisions when linking (static 221 functions) */ 222 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */ 223 LLVMDLLImportLinkage, /**< Function to be imported from DLL */ 224 LLVMDLLExportLinkage, /**< Function to be accessible from DLL */ 225 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */ 226 LLVMGhostLinkage, /**< Obsolete */ 227 LLVMCommonLinkage, /**< Tentative definitions */ 228 LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */ 229 LLVMLinkerPrivateWeakLinkage, /**< Like LinkerPrivate, but is weak. */ 230 LLVMLinkerPrivateWeakDefAutoLinkage /**< Like LinkerPrivateWeak, but possibly 231 hidden. */ 232} LLVMLinkage; 233 234typedef enum { 235 LLVMDefaultVisibility, /**< The GV is visible */ 236 LLVMHiddenVisibility, /**< The GV is hidden */ 237 LLVMProtectedVisibility /**< The GV is protected */ 238} LLVMVisibility; 239 240typedef enum { 241 LLVMCCallConv = 0, 242 LLVMFastCallConv = 8, 243 LLVMColdCallConv = 9, 244 LLVMX86StdcallCallConv = 64, 245 LLVMX86FastcallCallConv = 65 246} LLVMCallConv; 247 248typedef enum { 249 LLVMIntEQ = 32, /**< equal */ 250 LLVMIntNE, /**< not equal */ 251 LLVMIntUGT, /**< unsigned greater than */ 252 LLVMIntUGE, /**< unsigned greater or equal */ 253 LLVMIntULT, /**< unsigned less than */ 254 LLVMIntULE, /**< unsigned less or equal */ 255 LLVMIntSGT, /**< signed greater than */ 256 LLVMIntSGE, /**< signed greater or equal */ 257 LLVMIntSLT, /**< signed less than */ 258 LLVMIntSLE /**< signed less or equal */ 259} LLVMIntPredicate; 260 261typedef enum { 262 LLVMRealPredicateFalse, /**< Always false (always folded) */ 263 LLVMRealOEQ, /**< True if ordered and equal */ 264 LLVMRealOGT, /**< True if ordered and greater than */ 265 LLVMRealOGE, /**< True if ordered and greater than or equal */ 266 LLVMRealOLT, /**< True if ordered and less than */ 267 LLVMRealOLE, /**< True if ordered and less than or equal */ 268 LLVMRealONE, /**< True if ordered and operands are unequal */ 269 LLVMRealORD, /**< True if ordered (no nans) */ 270 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */ 271 LLVMRealUEQ, /**< True if unordered or equal */ 272 LLVMRealUGT, /**< True if unordered or greater than */ 273 LLVMRealUGE, /**< True if unordered, greater than, or equal */ 274 LLVMRealULT, /**< True if unordered or less than */ 275 LLVMRealULE, /**< True if unordered, less than, or equal */ 276 LLVMRealUNE, /**< True if unordered or not equal */ 277 LLVMRealPredicateTrue /**< Always true (always folded) */ 278} LLVMRealPredicate; 279 280 281/*===-- Error handling ----------------------------------------------------===*/ 282 283void LLVMDisposeMessage(char *Message); 284 285 286/*===-- Contexts ----------------------------------------------------------===*/ 287 288/* Create and destroy contexts. */ 289LLVMContextRef LLVMContextCreate(void); 290LLVMContextRef LLVMGetGlobalContext(void); 291void LLVMContextDispose(LLVMContextRef C); 292 293unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name, 294 unsigned SLen); 295unsigned LLVMGetMDKindID(const char* Name, unsigned SLen); 296 297/*===-- Modules -----------------------------------------------------------===*/ 298 299/* Create and destroy modules. */ 300/** See llvm::Module::Module. */ 301LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID); 302LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID, 303 LLVMContextRef C); 304 305/** See llvm::Module::~Module. */ 306void LLVMDisposeModule(LLVMModuleRef M); 307 308/** Data layout. See Module::getDataLayout. */ 309const char *LLVMGetDataLayout(LLVMModuleRef M); 310void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple); 311 312/** Target triple. See Module::getTargetTriple. */ 313const char *LLVMGetTarget(LLVMModuleRef M); 314void LLVMSetTarget(LLVMModuleRef M, const char *Triple); 315 316/** See Module::addTypeName. */ 317LLVMBool LLVMAddTypeName(LLVMModuleRef M, const char *Name, LLVMTypeRef Ty); 318void LLVMDeleteTypeName(LLVMModuleRef M, const char *Name); 319LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name); 320 321/** See Module::dump. */ 322void LLVMDumpModule(LLVMModuleRef M); 323 324/** See Module::setModuleInlineAsm. */ 325void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm); 326 327/*===-- Types -------------------------------------------------------------===*/ 328 329/* LLVM types conform to the following hierarchy: 330 * 331 * types: 332 * integer type 333 * real type 334 * function type 335 * sequence types: 336 * array type 337 * pointer type 338 * vector type 339 * void type 340 * label type 341 * opaque type 342 */ 343 344/** See llvm::LLVMTypeKind::getTypeID. */ 345LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty); 346 347/** See llvm::LLVMType::getContext. */ 348LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty); 349 350/* Operations on integer types */ 351LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C); 352LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C); 353LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C); 354LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C); 355LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C); 356LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits); 357 358LLVMTypeRef LLVMInt1Type(void); 359LLVMTypeRef LLVMInt8Type(void); 360LLVMTypeRef LLVMInt16Type(void); 361LLVMTypeRef LLVMInt32Type(void); 362LLVMTypeRef LLVMInt64Type(void); 363LLVMTypeRef LLVMIntType(unsigned NumBits); 364unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy); 365 366/* Operations on real types */ 367LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C); 368LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C); 369LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C); 370LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C); 371LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C); 372 373LLVMTypeRef LLVMFloatType(void); 374LLVMTypeRef LLVMDoubleType(void); 375LLVMTypeRef LLVMX86FP80Type(void); 376LLVMTypeRef LLVMFP128Type(void); 377LLVMTypeRef LLVMPPCFP128Type(void); 378 379/* Operations on function types */ 380LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType, 381 LLVMTypeRef *ParamTypes, unsigned ParamCount, 382 LLVMBool IsVarArg); 383LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy); 384LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy); 385unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy); 386void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest); 387 388/* Operations on struct types */ 389LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes, 390 unsigned ElementCount, LLVMBool Packed); 391LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount, 392 LLVMBool Packed); 393unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy); 394void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest); 395LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy); 396 397/* Operations on array, pointer, and vector types (sequence types) */ 398LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount); 399LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace); 400LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount); 401 402LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty); 403unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy); 404unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy); 405unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy); 406 407/* Operations on other types */ 408LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C); 409LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C); 410LLVMTypeRef LLVMOpaqueTypeInContext(LLVMContextRef C); 411 412LLVMTypeRef LLVMVoidType(void); 413LLVMTypeRef LLVMLabelType(void); 414LLVMTypeRef LLVMOpaqueType(void); 415 416/* Operations on type handles */ 417LLVMTypeHandleRef LLVMCreateTypeHandle(LLVMTypeRef PotentiallyAbstractTy); 418void LLVMRefineType(LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy); 419LLVMTypeRef LLVMResolveTypeHandle(LLVMTypeHandleRef TypeHandle); 420void LLVMDisposeTypeHandle(LLVMTypeHandleRef TypeHandle); 421 422 423/*===-- Values ------------------------------------------------------------===*/ 424 425/* The bulk of LLVM's object model consists of values, which comprise a very 426 * rich type hierarchy. 427 */ 428 429#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \ 430 macro(Argument) \ 431 macro(BasicBlock) \ 432 macro(InlineAsm) \ 433 macro(User) \ 434 macro(Constant) \ 435 macro(ConstantAggregateZero) \ 436 macro(ConstantArray) \ 437 macro(ConstantExpr) \ 438 macro(ConstantFP) \ 439 macro(ConstantInt) \ 440 macro(ConstantPointerNull) \ 441 macro(ConstantStruct) \ 442 macro(ConstantVector) \ 443 macro(GlobalValue) \ 444 macro(Function) \ 445 macro(GlobalAlias) \ 446 macro(GlobalVariable) \ 447 macro(UndefValue) \ 448 macro(Instruction) \ 449 macro(BinaryOperator) \ 450 macro(CallInst) \ 451 macro(IntrinsicInst) \ 452 macro(DbgInfoIntrinsic) \ 453 macro(DbgDeclareInst) \ 454 macro(EHSelectorInst) \ 455 macro(MemIntrinsic) \ 456 macro(MemCpyInst) \ 457 macro(MemMoveInst) \ 458 macro(MemSetInst) \ 459 macro(CmpInst) \ 460 macro(FCmpInst) \ 461 macro(ICmpInst) \ 462 macro(ExtractElementInst) \ 463 macro(GetElementPtrInst) \ 464 macro(InsertElementInst) \ 465 macro(InsertValueInst) \ 466 macro(PHINode) \ 467 macro(SelectInst) \ 468 macro(ShuffleVectorInst) \ 469 macro(StoreInst) \ 470 macro(TerminatorInst) \ 471 macro(BranchInst) \ 472 macro(InvokeInst) \ 473 macro(ReturnInst) \ 474 macro(SwitchInst) \ 475 macro(UnreachableInst) \ 476 macro(UnwindInst) \ 477 macro(UnaryInstruction) \ 478 macro(AllocaInst) \ 479 macro(CastInst) \ 480 macro(BitCastInst) \ 481 macro(FPExtInst) \ 482 macro(FPToSIInst) \ 483 macro(FPToUIInst) \ 484 macro(FPTruncInst) \ 485 macro(IntToPtrInst) \ 486 macro(PtrToIntInst) \ 487 macro(SExtInst) \ 488 macro(SIToFPInst) \ 489 macro(TruncInst) \ 490 macro(UIToFPInst) \ 491 macro(ZExtInst) \ 492 macro(ExtractValueInst) \ 493 macro(LoadInst) \ 494 macro(VAArgInst) 495 496/* Operations on all values */ 497LLVMTypeRef LLVMTypeOf(LLVMValueRef Val); 498const char *LLVMGetValueName(LLVMValueRef Val); 499void LLVMSetValueName(LLVMValueRef Val, const char *Name); 500void LLVMDumpValue(LLVMValueRef Val); 501void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal); 502int LLVMHasMetadata(LLVMValueRef Val); 503LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID); 504void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node); 505 506/* Conversion functions. Return the input value if it is an instance of the 507 specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */ 508#define LLVM_DECLARE_VALUE_CAST(name) \ 509 LLVMValueRef LLVMIsA##name(LLVMValueRef Val); 510LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST) 511 512/* Operations on Uses */ 513LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val); 514LLVMUseRef LLVMGetNextUse(LLVMUseRef U); 515LLVMValueRef LLVMGetUser(LLVMUseRef U); 516LLVMValueRef LLVMGetUsedValue(LLVMUseRef U); 517 518/* Operations on Users */ 519LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index); 520void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val); 521int LLVMGetNumOperands(LLVMValueRef Val); 522 523/* Operations on constants of any type */ 524LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */ 525LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */ 526LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty); 527LLVMBool LLVMIsConstant(LLVMValueRef Val); 528LLVMBool LLVMIsNull(LLVMValueRef Val); 529LLVMBool LLVMIsUndef(LLVMValueRef Val); 530LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty); 531 532/* Operations on metadata */ 533LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str, 534 unsigned SLen); 535LLVMValueRef LLVMMDString(const char *Str, unsigned SLen); 536LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals, 537 unsigned Count); 538LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count); 539 540/* Operations on scalar constants */ 541LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N, 542 LLVMBool SignExtend); 543LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text, 544 uint8_t Radix); 545LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text, 546 unsigned SLen, uint8_t Radix); 547LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N); 548LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text); 549LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text, 550 unsigned SLen); 551unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal); 552long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal); 553 554 555/* Operations on composite constants */ 556LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str, 557 unsigned Length, LLVMBool DontNullTerminate); 558LLVMValueRef LLVMConstStructInContext(LLVMContextRef C, 559 LLVMValueRef *ConstantVals, 560 unsigned Count, LLVMBool Packed); 561 562LLVMValueRef LLVMConstString(const char *Str, unsigned Length, 563 LLVMBool DontNullTerminate); 564LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy, 565 LLVMValueRef *ConstantVals, unsigned Length); 566LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count, 567 LLVMBool Packed); 568LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size); 569 570/* Constant expressions */ 571LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal); 572LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty); 573LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty); 574LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal); 575LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal); 576LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal); 577LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal); 578LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal); 579LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 580LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 581LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 582LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 583LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 584LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 585LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 586LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 587LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 588LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 589LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 590LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 591LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 592LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 593LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 594LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 595LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 596LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 597LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 598LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 599LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 600LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 601LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate, 602 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 603LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate, 604 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 605LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 606LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 607LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 608LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal, 609 LLVMValueRef *ConstantIndices, unsigned NumIndices); 610LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal, 611 LLVMValueRef *ConstantIndices, 612 unsigned NumIndices); 613LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 614LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 615LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 616LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 617LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 618LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 619LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 620LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 621LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 622LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 623LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 624LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 625LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal, 626 LLVMTypeRef ToType); 627LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal, 628 LLVMTypeRef ToType); 629LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal, 630 LLVMTypeRef ToType); 631LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal, 632 LLVMTypeRef ToType); 633LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType, 634 LLVMBool isSigned); 635LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 636LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition, 637 LLVMValueRef ConstantIfTrue, 638 LLVMValueRef ConstantIfFalse); 639LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant, 640 LLVMValueRef IndexConstant); 641LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant, 642 LLVMValueRef ElementValueConstant, 643 LLVMValueRef IndexConstant); 644LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant, 645 LLVMValueRef VectorBConstant, 646 LLVMValueRef MaskConstant); 647LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList, 648 unsigned NumIdx); 649LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant, 650 LLVMValueRef ElementValueConstant, 651 unsigned *IdxList, unsigned NumIdx); 652LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty, 653 const char *AsmString, const char *Constraints, 654 LLVMBool HasSideEffects, LLVMBool IsAlignStack); 655LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB); 656 657/* Operations on global variables, functions, and aliases (globals) */ 658LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global); 659LLVMBool LLVMIsDeclaration(LLVMValueRef Global); 660LLVMLinkage LLVMGetLinkage(LLVMValueRef Global); 661void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage); 662const char *LLVMGetSection(LLVMValueRef Global); 663void LLVMSetSection(LLVMValueRef Global, const char *Section); 664LLVMVisibility LLVMGetVisibility(LLVMValueRef Global); 665void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz); 666unsigned LLVMGetAlignment(LLVMValueRef Global); 667void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes); 668 669/* Operations on global variables */ 670LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name); 671LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty, 672 const char *Name, 673 unsigned AddressSpace); 674LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name); 675LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M); 676LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M); 677LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar); 678LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar); 679void LLVMDeleteGlobal(LLVMValueRef GlobalVar); 680LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar); 681void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal); 682LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar); 683void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal); 684LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar); 685void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant); 686 687/* Operations on aliases */ 688LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee, 689 const char *Name); 690 691/* Operations on functions */ 692LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name, 693 LLVMTypeRef FunctionTy); 694LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name); 695LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M); 696LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M); 697LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn); 698LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn); 699void LLVMDeleteFunction(LLVMValueRef Fn); 700unsigned LLVMGetIntrinsicID(LLVMValueRef Fn); 701unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn); 702void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC); 703const char *LLVMGetGC(LLVMValueRef Fn); 704void LLVMSetGC(LLVMValueRef Fn, const char *Name); 705void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA); 706LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn); 707void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA); 708 709/* Operations on parameters */ 710unsigned LLVMCountParams(LLVMValueRef Fn); 711void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params); 712LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index); 713LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst); 714LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn); 715LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn); 716LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg); 717LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg); 718void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA); 719void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA); 720LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg); 721void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align); 722 723/* Operations on basic blocks */ 724LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB); 725LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val); 726LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val); 727LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB); 728unsigned LLVMCountBasicBlocks(LLVMValueRef Fn); 729void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks); 730LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn); 731LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn); 732LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB); 733LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB); 734LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn); 735 736LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C, 737 LLVMValueRef Fn, 738 const char *Name); 739LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C, 740 LLVMBasicBlockRef BB, 741 const char *Name); 742 743LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name); 744LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB, 745 const char *Name); 746void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB); 747 748void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos); 749void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos); 750 751/* Operations on instructions */ 752LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst); 753LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB); 754LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB); 755LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst); 756LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst); 757 758/* Operations on call sites */ 759void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC); 760unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr); 761void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute); 762void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index, 763 LLVMAttribute); 764void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index, 765 unsigned align); 766 767/* Operations on call instructions (only) */ 768LLVMBool LLVMIsTailCall(LLVMValueRef CallInst); 769void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall); 770 771/* Operations on phi nodes */ 772void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues, 773 LLVMBasicBlockRef *IncomingBlocks, unsigned Count); 774unsigned LLVMCountIncoming(LLVMValueRef PhiNode); 775LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index); 776LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index); 777 778/*===-- Instruction builders ----------------------------------------------===*/ 779 780/* An instruction builder represents a point within a basic block, and is the 781 * exclusive means of building instructions using the C interface. 782 */ 783 784LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C); 785LLVMBuilderRef LLVMCreateBuilder(void); 786void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block, 787 LLVMValueRef Instr); 788void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr); 789void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block); 790LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder); 791void LLVMClearInsertionPosition(LLVMBuilderRef Builder); 792void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr); 793void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr, 794 const char *Name); 795void LLVMDisposeBuilder(LLVMBuilderRef Builder); 796 797/* Metadata */ 798void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L); 799LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder); 800void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst); 801 802/* Terminators */ 803LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef); 804LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V); 805LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals, 806 unsigned N); 807LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest); 808LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If, 809 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else); 810LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V, 811 LLVMBasicBlockRef Else, unsigned NumCases); 812LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr, 813 unsigned NumDests); 814LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn, 815 LLVMValueRef *Args, unsigned NumArgs, 816 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch, 817 const char *Name); 818LLVMValueRef LLVMBuildUnwind(LLVMBuilderRef); 819LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef); 820 821/* Add a case to the switch instruction */ 822void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal, 823 LLVMBasicBlockRef Dest); 824 825/* Add a destination to the indirectbr instruction */ 826void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest); 827 828/* Arithmetic */ 829LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 830 const char *Name); 831LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 832 const char *Name); 833LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 834 const char *Name); 835LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 836 const char *Name); 837LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 838 const char *Name); 839LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 840 const char *Name); 841LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 842 const char *Name); 843LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 844 const char *Name); 845LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 846 const char *Name); 847LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 848 const char *Name); 849LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 850 const char *Name); 851LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 852 const char *Name); 853LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 854 const char *Name); 855LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 856 const char *Name); 857LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 858 const char *Name); 859LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 860 const char *Name); 861LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 862 const char *Name); 863LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 864 const char *Name); 865LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 866 const char *Name); 867LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 868 const char *Name); 869LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 870 const char *Name); 871LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 872 const char *Name); 873LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 874 const char *Name); 875LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 876 const char *Name); 877LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 878 const char *Name); 879LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op, 880 LLVMValueRef LHS, LLVMValueRef RHS, 881 const char *Name); 882LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name); 883LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V, 884 const char *Name); 885LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V, 886 const char *Name); 887LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name); 888LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name); 889 890/* Memory */ 891LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name); 892LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty, 893 LLVMValueRef Val, const char *Name); 894LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name); 895LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty, 896 LLVMValueRef Val, const char *Name); 897LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal); 898LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal, 899 const char *Name); 900LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr); 901LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer, 902 LLVMValueRef *Indices, unsigned NumIndices, 903 const char *Name); 904LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer, 905 LLVMValueRef *Indices, unsigned NumIndices, 906 const char *Name); 907LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer, 908 unsigned Idx, const char *Name); 909LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str, 910 const char *Name); 911LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str, 912 const char *Name); 913 914/* Casts */ 915LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val, 916 LLVMTypeRef DestTy, const char *Name); 917LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val, 918 LLVMTypeRef DestTy, const char *Name); 919LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val, 920 LLVMTypeRef DestTy, const char *Name); 921LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val, 922 LLVMTypeRef DestTy, const char *Name); 923LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val, 924 LLVMTypeRef DestTy, const char *Name); 925LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val, 926 LLVMTypeRef DestTy, const char *Name); 927LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val, 928 LLVMTypeRef DestTy, const char *Name); 929LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val, 930 LLVMTypeRef DestTy, const char *Name); 931LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val, 932 LLVMTypeRef DestTy, const char *Name); 933LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val, 934 LLVMTypeRef DestTy, const char *Name); 935LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val, 936 LLVMTypeRef DestTy, const char *Name); 937LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val, 938 LLVMTypeRef DestTy, const char *Name); 939LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val, 940 LLVMTypeRef DestTy, const char *Name); 941LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val, 942 LLVMTypeRef DestTy, const char *Name); 943LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val, 944 LLVMTypeRef DestTy, const char *Name); 945LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val, 946 LLVMTypeRef DestTy, const char *Name); 947LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val, 948 LLVMTypeRef DestTy, const char *Name); 949LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/ 950 LLVMTypeRef DestTy, const char *Name); 951LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val, 952 LLVMTypeRef DestTy, const char *Name); 953 954/* Comparisons */ 955LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op, 956 LLVMValueRef LHS, LLVMValueRef RHS, 957 const char *Name); 958LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op, 959 LLVMValueRef LHS, LLVMValueRef RHS, 960 const char *Name); 961 962/* Miscellaneous instructions */ 963LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name); 964LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn, 965 LLVMValueRef *Args, unsigned NumArgs, 966 const char *Name); 967LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If, 968 LLVMValueRef Then, LLVMValueRef Else, 969 const char *Name); 970LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty, 971 const char *Name); 972LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal, 973 LLVMValueRef Index, const char *Name); 974LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal, 975 LLVMValueRef EltVal, LLVMValueRef Index, 976 const char *Name); 977LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1, 978 LLVMValueRef V2, LLVMValueRef Mask, 979 const char *Name); 980LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal, 981 unsigned Index, const char *Name); 982LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal, 983 LLVMValueRef EltVal, unsigned Index, 984 const char *Name); 985 986LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val, 987 const char *Name); 988LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val, 989 const char *Name); 990LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS, 991 LLVMValueRef RHS, const char *Name); 992 993 994/*===-- Module providers --------------------------------------------------===*/ 995 996/* Changes the type of M so it can be passed to FunctionPassManagers and the 997 * JIT. They take ModuleProviders for historical reasons. 998 */ 999LLVMModuleProviderRef 1000LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M); 1001 1002/* Destroys the module M. 1003 */ 1004void LLVMDisposeModuleProvider(LLVMModuleProviderRef M); 1005 1006 1007/*===-- Memory buffers ----------------------------------------------------===*/ 1008 1009LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path, 1010 LLVMMemoryBufferRef *OutMemBuf, 1011 char **OutMessage); 1012LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf, 1013 char **OutMessage); 1014void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf); 1015 1016 1017/*===-- Pass Managers -----------------------------------------------------===*/ 1018 1019/** Constructs a new whole-module pass pipeline. This type of pipeline is 1020 suitable for link-time optimization and whole-module transformations. 1021 See llvm::PassManager::PassManager. */ 1022LLVMPassManagerRef LLVMCreatePassManager(void); 1023 1024/** Constructs a new function-by-function pass pipeline over the module 1025 provider. It does not take ownership of the module provider. This type of 1026 pipeline is suitable for code generation and JIT compilation tasks. 1027 See llvm::FunctionPassManager::FunctionPassManager. */ 1028LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M); 1029 1030/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */ 1031LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP); 1032 1033/** Initializes, executes on the provided module, and finalizes all of the 1034 passes scheduled in the pass manager. Returns 1 if any of the passes 1035 modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */ 1036LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M); 1037 1038/** Initializes all of the function passes scheduled in the function pass 1039 manager. Returns 1 if any of the passes modified the module, 0 otherwise. 1040 See llvm::FunctionPassManager::doInitialization. */ 1041LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM); 1042 1043/** Executes all of the function passes scheduled in the function pass manager 1044 on the provided function. Returns 1 if any of the passes modified the 1045 function, false otherwise. 1046 See llvm::FunctionPassManager::run(Function&). */ 1047LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F); 1048 1049/** Finalizes all of the function passes scheduled in in the function pass 1050 manager. Returns 1 if any of the passes modified the module, 0 otherwise. 1051 See llvm::FunctionPassManager::doFinalization. */ 1052LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM); 1053 1054/** Frees the memory of a pass pipeline. For function pipelines, does not free 1055 the module provider. 1056 See llvm::PassManagerBase::~PassManagerBase. */ 1057void LLVMDisposePassManager(LLVMPassManagerRef PM); 1058 1059 1060#ifdef __cplusplus 1061} 1062 1063namespace llvm { 1064 class MemoryBuffer; 1065 class PassManagerBase; 1066 1067 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \ 1068 inline ty *unwrap(ref P) { \ 1069 return reinterpret_cast<ty*>(P); \ 1070 } \ 1071 \ 1072 inline ref wrap(const ty *P) { \ 1073 return reinterpret_cast<ref>(const_cast<ty*>(P)); \ 1074 } 1075 1076 #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \ 1077 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \ 1078 \ 1079 template<typename T> \ 1080 inline T *unwrap(ref P) { \ 1081 return cast<T>(unwrap(P)); \ 1082 } 1083 1084 #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \ 1085 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \ 1086 \ 1087 template<typename T> \ 1088 inline T *unwrap(ref P) { \ 1089 T *Q = (T*)unwrap(P); \ 1090 assert(Q && "Invalid cast!"); \ 1091 return Q; \ 1092 } 1093 1094 DEFINE_ISA_CONVERSION_FUNCTIONS (Type, LLVMTypeRef ) 1095 DEFINE_ISA_CONVERSION_FUNCTIONS (Value, LLVMValueRef ) 1096 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef ) 1097 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef ) 1098 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef ) 1099 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(PATypeHolder, LLVMTypeHandleRef ) 1100 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef ) 1101 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef ) 1102 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use, LLVMUseRef ) 1103 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef ) 1104 /* LLVMModuleProviderRef exists for historical reasons, but now just holds a 1105 * Module. 1106 */ 1107 inline Module *unwrap(LLVMModuleProviderRef MP) { 1108 return reinterpret_cast<Module*>(MP); 1109 } 1110 1111 #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS 1112 #undef DEFINE_ISA_CONVERSION_FUNCTIONS 1113 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS 1114 1115 /* Specialized opaque context conversions. 1116 */ 1117 inline LLVMContext **unwrap(LLVMContextRef* Tys) { 1118 return reinterpret_cast<LLVMContext**>(Tys); 1119 } 1120 1121 inline LLVMContextRef *wrap(const LLVMContext **Tys) { 1122 return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys)); 1123 } 1124 1125 /* Specialized opaque type conversions. 1126 */ 1127 inline Type **unwrap(LLVMTypeRef* Tys) { 1128 return reinterpret_cast<Type**>(Tys); 1129 } 1130 1131 inline LLVMTypeRef *wrap(const Type **Tys) { 1132 return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys)); 1133 } 1134 1135 /* Specialized opaque value conversions. 1136 */ 1137 inline Value **unwrap(LLVMValueRef *Vals) { 1138 return reinterpret_cast<Value**>(Vals); 1139 } 1140 1141 template<typename T> 1142 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) { 1143 #if DEBUG 1144 for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I) 1145 cast<T>(*I); 1146 #endif 1147 return reinterpret_cast<T**>(Vals); 1148 } 1149 1150 inline LLVMValueRef *wrap(const Value **Vals) { 1151 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals)); 1152 } 1153} 1154 1155#endif /* !defined(__cplusplus) */ 1156 1157#endif /* !defined(LLVM_C_CORE_H) */ 1158