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