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