Core.h revision 7ed47a13356daed2a34cd2209a31f92552e3bdd8
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#ifdef __cplusplus 37 38/* Need these includes to support the LLVM 'cast' template for the C++ 'wrap' 39 and 'unwrap' conversion functions. */ 40#include "llvm/Module.h" 41#include "llvm/Support/LLVMBuilder.h" 42 43extern "C" { 44#endif 45 46 47/* Opaque types. */ 48typedef struct LLVMOpaqueModule *LLVMModuleRef; 49typedef struct LLVMOpaqueType *LLVMTypeRef; 50typedef struct LLVMOpaqueTypeHandle *LLVMTypeHandleRef; 51typedef struct LLVMOpaqueValue *LLVMValueRef; 52typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef; 53typedef struct LLVMOpaqueBuilder *LLVMBuilderRef; 54 55/* Used to provide a module to JIT or interpreter. 56 * See the llvm::ModuleProvider class. 57 */ 58typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef; 59 60/* Used to provide a module to JIT or interpreter. 61 * See the llvm::MemoryBuffer class. 62 */ 63typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef; 64 65typedef enum { 66 LLVMVoidTypeKind, /* type with no size */ 67 LLVMFloatTypeKind, /* 32 bit floating point type */ 68 LLVMDoubleTypeKind, /* 64 bit floating point type */ 69 LLVMX86_FP80TypeKind, /* 80 bit floating point type (X87) */ 70 LLVMFP128TypeKind, /* 128 bit floating point type (112-bit mantissa) */ 71 LLVMPPC_FP128TypeKind, /* 128 bit floating point type (two 64-bits) */ 72 LLVMLabelTypeKind, /* Labels */ 73 LLVMIntegerTypeKind, /* Arbitrary bit width integers */ 74 LLVMFunctionTypeKind, /* Functions */ 75 LLVMStructTypeKind, /* Structures */ 76 LLVMArrayTypeKind, /* Arrays */ 77 LLVMPointerTypeKind, /* Pointers */ 78 LLVMOpaqueTypeKind, /* Opaque: type with unknown structure */ 79 LLVMVectorTypeKind /* SIMD 'packed' format, or other vector type */ 80} LLVMTypeKind; 81 82typedef enum { 83 LLVMExternalLinkage, /* Externally visible function */ 84 LLVMLinkOnceLinkage, /* Keep one copy of function when linking (inline) */ 85 LLVMWeakLinkage, /* Keep one copy of function when linking (weak) */ 86 LLVMAppendingLinkage, /* Special purpose, only applies to global arrays */ 87 LLVMInternalLinkage, /* Rename collisions when linking (static functions)*/ 88 LLVMDLLImportLinkage, /* Function to be imported from DLL */ 89 LLVMDLLExportLinkage, /* Function to be accessible from DLL */ 90 LLVMExternalWeakLinkage,/* ExternalWeak linkage description */ 91 LLVMGhostLinkage /* Stand-in functions for streaming fns from bitcode*/ 92} LLVMLinkage; 93 94typedef enum { 95 LLVMDefaultVisibility, /* The GV is visible */ 96 LLVMHiddenVisibility, /* The GV is hidden */ 97 LLVMProtectedVisibility /* The GV is protected */ 98} LLVMVisibility; 99 100typedef enum { 101 LLVMCCallConv = 0, 102 LLVMFastCallConv = 8, 103 LLVMColdCallConv = 9, 104 LLVMX86StdcallCallConv = 64, 105 LLVMX86FastcallCallConv = 65 106} LLVMCallConv; 107 108typedef enum { 109 LLVMIntEQ = 32, /* equal */ 110 LLVMIntNE, /* not equal */ 111 LLVMIntUGT, /* unsigned greater than */ 112 LLVMIntUGE, /* unsigned greater or equal */ 113 LLVMIntULT, /* unsigned less than */ 114 LLVMIntULE, /* unsigned less or equal */ 115 LLVMIntSGT, /* signed greater than */ 116 LLVMIntSGE, /* signed greater or equal */ 117 LLVMIntSLT, /* signed less than */ 118 LLVMIntSLE /* signed less or equal */ 119} LLVMIntPredicate; 120 121typedef enum { 122 LLVMRealPredicateFalse, /* Always false (always folded) */ 123 LLVMRealOEQ, /* True if ordered and equal */ 124 LLVMRealOGT, /* True if ordered and greater than */ 125 LLVMRealOGE, /* True if ordered and greater than or equal */ 126 LLVMRealOLT, /* True if ordered and less than */ 127 LLVMRealOLE, /* True if ordered and less than or equal */ 128 LLVMRealONE, /* True if ordered and operands are unequal */ 129 LLVMRealORD, /* True if ordered (no nans) */ 130 LLVMRealUNO, /* True if unordered: isnan(X) | isnan(Y) */ 131 LLVMRealUEQ, /* True if unordered or equal */ 132 LLVMRealUGT, /* True if unordered or greater than */ 133 LLVMRealUGE, /* True if unordered, greater than, or equal */ 134 LLVMRealULT, /* True if unordered or less than */ 135 LLVMRealULE, /* True if unordered, less than, or equal */ 136 LLVMRealUNE, /* True if unordered or not equal */ 137 LLVMRealPredicateTrue /* Always true (always folded) */ 138} LLVMRealPredicate; 139 140 141/*===-- Error handling ----------------------------------------------------===*/ 142 143void LLVMDisposeMessage(char *Message); 144 145 146/*===-- Modules -----------------------------------------------------------===*/ 147 148/* Create and destroy modules. */ 149LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID); 150void LLVMDisposeModule(LLVMModuleRef M); 151 152/* Data layout */ 153const char *LLVMGetDataLayout(LLVMModuleRef M); 154void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple); 155 156/* Target triple */ 157const char *LLVMGetTarget(LLVMModuleRef M); 158void LLVMSetTarget(LLVMModuleRef M, const char *Triple); 159 160/* Same as Module::addTypeName. */ 161int LLVMAddTypeName(LLVMModuleRef M, const char *Name, LLVMTypeRef Ty); 162void LLVMDeleteTypeName(LLVMModuleRef M, const char *Name); 163 164 165/*===-- Types -------------------------------------------------------------===*/ 166 167/* LLVM types conform to the following hierarchy: 168 * 169 * types: 170 * integer type 171 * real type 172 * function type 173 * sequence types: 174 * array type 175 * pointer type 176 * vector type 177 * void type 178 * label type 179 * opaque type 180 */ 181 182LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty); 183void LLVMRefineAbstractType(LLVMTypeRef AbstractType, LLVMTypeRef ConcreteType); 184 185/* Operations on integer types */ 186LLVMTypeRef LLVMInt1Type(); 187LLVMTypeRef LLVMInt8Type(); 188LLVMTypeRef LLVMInt16Type(); 189LLVMTypeRef LLVMInt32Type(); 190LLVMTypeRef LLVMInt64Type(); 191LLVMTypeRef LLVMIntType(unsigned NumBits); 192unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy); 193 194/* Operations on real types */ 195LLVMTypeRef LLVMFloatType(); 196LLVMTypeRef LLVMDoubleType(); 197LLVMTypeRef LLVMX86FP80Type(); 198LLVMTypeRef LLVMFP128Type(); 199LLVMTypeRef LLVMPPCFP128Type(); 200 201/* Operations on function types */ 202LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType, 203 LLVMTypeRef *ParamTypes, unsigned ParamCount, 204 int IsVarArg); 205int LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy); 206LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy); 207unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy); 208void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest); 209 210/* Operations on struct types */ 211LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount, 212 int Packed); 213unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy); 214void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest); 215int LLVMIsPackedStruct(LLVMTypeRef StructTy); 216 217/* Operations on array, pointer, and vector types (sequence types) */ 218LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount); 219LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace); 220LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount); 221 222LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty); 223unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy); 224unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy); 225unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy); 226 227/* Operations on other types */ 228LLVMTypeRef LLVMVoidType(); 229LLVMTypeRef LLVMLabelType(); 230LLVMTypeRef LLVMOpaqueType(); 231 232/* Operations on type handles */ 233LLVMTypeHandleRef LLVMCreateTypeHandle(LLVMTypeRef PotentiallyAbstractTy); 234void LLVMRefineType(LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy); 235LLVMTypeRef LLVMResolveTypeHandle(LLVMTypeHandleRef TypeHandle); 236void LLVMDisposeTypeHandle(LLVMTypeHandleRef TypeHandle); 237 238 239/*===-- Values ------------------------------------------------------------===*/ 240 241/* The bulk of LLVM's object model consists of values, which comprise a very 242 * rich type hierarchy. 243 * 244 * values: 245 * constants: 246 * scalar constants 247 * composite contants 248 * globals: 249 * global variable 250 * function 251 * alias 252 * basic blocks 253 */ 254 255/* Operations on all values */ 256LLVMTypeRef LLVMTypeOf(LLVMValueRef Val); 257const char *LLVMGetValueName(LLVMValueRef Val); 258void LLVMSetValueName(LLVMValueRef Val, const char *Name); 259void LLVMDumpValue(LLVMValueRef Val); 260 261/* Operations on constants of any type */ 262LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */ 263LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */ 264LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty); 265int LLVMIsConstant(LLVMValueRef Val); 266int LLVMIsNull(LLVMValueRef Val); 267int LLVMIsUndef(LLVMValueRef Val); 268 269/* Operations on scalar constants */ 270LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N, 271 int SignExtend); 272LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N); 273 274/* Operations on composite constants */ 275LLVMValueRef LLVMConstString(const char *Str, unsigned Length, 276 int DontNullTerminate); 277LLVMValueRef LLVMConstArray(LLVMTypeRef ArrayTy, 278 LLVMValueRef *ConstantVals, unsigned Length); 279LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count, 280 int packed); 281LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size); 282 283/* Constant expressions */ 284LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty); 285LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal); 286LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal); 287LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 288LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 289LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 290LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 291LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 292LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 293LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 294LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 295LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 296LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 297LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 298LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 299LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate, 300 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 301LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate, 302 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 303LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 304LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 305LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); 306LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal, 307 LLVMValueRef *ConstantIndices, unsigned NumIndices); 308LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 309LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 310LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 311LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 312LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 313LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 314LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 315LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 316LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 317LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 318LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 319LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType); 320LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition, 321 LLVMValueRef ConstantIfTrue, 322 LLVMValueRef ConstantIfFalse); 323LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant, 324 LLVMValueRef IndexConstant); 325LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant, 326 LLVMValueRef ElementValueConstant, 327 LLVMValueRef IndexConstant); 328LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant, 329 LLVMValueRef VectorBConstant, 330 LLVMValueRef MaskConstant); 331 332/* Operations on global variables, functions, and aliases (globals) */ 333int LLVMIsDeclaration(LLVMValueRef Global); 334LLVMLinkage LLVMGetLinkage(LLVMValueRef Global); 335void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage); 336const char *LLVMGetSection(LLVMValueRef Global); 337void LLVMSetSection(LLVMValueRef Global, const char *Section); 338LLVMVisibility LLVMGetVisibility(LLVMValueRef Global); 339void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz); 340unsigned LLVMGetAlignment(LLVMValueRef Global); 341void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes); 342 343/* Operations on global variables */ 344LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name); 345LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name); 346void LLVMDeleteGlobal(LLVMValueRef GlobalVar); 347int LLVMHasInitializer(LLVMValueRef GlobalVar); 348LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar); 349void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal); 350int LLVMIsThreadLocal(LLVMValueRef GlobalVar); 351void LLVMSetThreadLocal(LLVMValueRef GlobalVar, int IsThreadLocal); 352int LLVMIsGlobalConstant(LLVMValueRef GlobalVar); 353void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, int IsConstant); 354 355/* Operations on functions */ 356LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name, 357 LLVMTypeRef FunctionTy); 358LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name); 359void LLVMDeleteFunction(LLVMValueRef Fn); 360unsigned LLVMCountParams(LLVMValueRef Fn); 361void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params); 362LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index); 363unsigned LLVMGetIntrinsicID(LLVMValueRef Fn); 364unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn); 365void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC); 366const char *LLVMGetCollector(LLVMValueRef Fn); 367void LLVMSetCollector(LLVMValueRef Fn, const char *Coll); 368 369/* Operations on basic blocks */ 370LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef Bb); 371int LLVMValueIsBasicBlock(LLVMValueRef Val); 372LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val); 373unsigned LLVMCountBasicBlocks(LLVMValueRef Fn); 374void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks); 375LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn); 376LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name); 377LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB, 378 const char *Name); 379void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB); 380 381/* Operations on phi nodes */ 382void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues, 383 LLVMBasicBlockRef *IncomingBlocks, unsigned Count); 384unsigned LLVMCountIncoming(LLVMValueRef PhiNode); 385LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index); 386LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index); 387 388/*===-- Instruction builders ----------------------------------------------===*/ 389 390/* An instruction builder represents a point within a basic block, and is the 391 * exclusive means of building instructions using the C interface. 392 */ 393 394LLVMBuilderRef LLVMCreateBuilder(); 395void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr); 396void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block); 397void LLVMDisposeBuilder(LLVMBuilderRef Builder); 398 399/* Terminators */ 400LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef); 401LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V); 402LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest); 403LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If, 404 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else); 405LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V, 406 LLVMBasicBlockRef Else, unsigned NumCases); 407LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn, 408 LLVMValueRef *Args, unsigned NumArgs, 409 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch, 410 const char *Name); 411LLVMValueRef LLVMBuildUnwind(LLVMBuilderRef); 412LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef); 413 414/* Arithmetic */ 415LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 416 const char *Name); 417LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 418 const char *Name); 419LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 420 const char *Name); 421LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 422 const char *Name); 423LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 424 const char *Name); 425LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 426 const char *Name); 427LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 428 const char *Name); 429LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 430 const char *Name); 431LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 432 const char *Name); 433LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 434 const char *Name); 435LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 436 const char *Name); 437LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 438 const char *Name); 439LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 440 const char *Name); 441LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 442 const char *Name); 443LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, 444 const char *Name); 445LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name); 446LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name); 447 448/* Memory */ 449LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name); 450LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty, 451 LLVMValueRef Val, const char *Name); 452LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name); 453LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty, 454 LLVMValueRef Val, const char *Name); 455LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal); 456LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal, 457 const char *Name); 458LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr); 459LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer, 460 LLVMValueRef *Indices, unsigned NumIndices, 461 const char *Name); 462 463/* Casts */ 464LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val, 465 LLVMTypeRef DestTy, const char *Name); 466LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val, 467 LLVMTypeRef DestTy, const char *Name); 468LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val, 469 LLVMTypeRef DestTy, const char *Name); 470LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val, 471 LLVMTypeRef DestTy, const char *Name); 472LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val, 473 LLVMTypeRef DestTy, const char *Name); 474LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val, 475 LLVMTypeRef DestTy, const char *Name); 476LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val, 477 LLVMTypeRef DestTy, const char *Name); 478LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val, 479 LLVMTypeRef DestTy, const char *Name); 480LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val, 481 LLVMTypeRef DestTy, const char *Name); 482LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val, 483 LLVMTypeRef DestTy, const char *Name); 484LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val, 485 LLVMTypeRef DestTy, const char *Name); 486LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val, 487 LLVMTypeRef DestTy, const char *Name); 488 489/* Comparisons */ 490LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op, 491 LLVMValueRef LHS, LLVMValueRef RHS, 492 const char *Name); 493LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op, 494 LLVMValueRef LHS, LLVMValueRef RHS, 495 const char *Name); 496 497/* Miscellaneous instructions */ 498LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name); 499LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn, 500 LLVMValueRef *Args, unsigned NumArgs, 501 const char *Name); 502LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If, 503 LLVMValueRef Then, LLVMValueRef Else, 504 const char *Name); 505LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty, 506 const char *Name); 507LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal, 508 LLVMValueRef Index, const char *Name); 509LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal, 510 LLVMValueRef EltVal, LLVMValueRef Index, 511 const char *Name); 512LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1, 513 LLVMValueRef V2, LLVMValueRef Mask, 514 const char *Name); 515 516 517/*===-- Module providers --------------------------------------------------===*/ 518 519/* Encapsulates the module M in a module provider, taking ownership of the 520 * module. 521 * See the constructor llvm::ExistingModuleProvider::ExistingModuleProvider. 522 */ 523LLVMModuleProviderRef 524LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M); 525 526/* Destroys the module provider MP as well as the contained module. 527 * See the destructor llvm::ModuleProvider::~ModuleProvider. 528 */ 529void LLVMDisposeModuleProvider(LLVMModuleProviderRef MP); 530 531 532/*===-- Memory buffers ----------------------------------------------------===*/ 533 534int LLVMCreateMemoryBufferWithContentsOfFile(const char *Path, 535 LLVMMemoryBufferRef *OutMemBuf, 536 char **OutMessage); 537int LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf, 538 char **OutMessage); 539void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf); 540 541#ifdef __cplusplus 542} 543 544namespace llvm { 545 class ModuleProvider; 546 class MemoryBuffer; 547 548 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \ 549 inline ty *unwrap(ref P) { \ 550 return reinterpret_cast<ty*>(P); \ 551 } \ 552 \ 553 inline ref wrap(const ty *P) { \ 554 return reinterpret_cast<ref>(const_cast<ty*>(P)); \ 555 } 556 557 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Type, LLVMTypeRef ) 558 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Value, LLVMValueRef ) 559 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef ) 560 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef ) 561 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMFoldingBuilder, LLVMBuilderRef ) 562 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(PATypeHolder, LLVMTypeHandleRef ) 563 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ModuleProvider, LLVMModuleProviderRef) 564 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef ) 565 566 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS 567 568 /* Specialized opaque type conversions. 569 */ 570 template<typename T> 571 inline T *unwrap(LLVMTypeRef Ty) { 572 return cast<T>(unwrap(Ty)); 573 } 574 575 inline Type **unwrap(LLVMTypeRef* Tys) { 576 return reinterpret_cast<Type**>(Tys); 577 } 578 579 inline LLVMTypeRef *wrap(const Type **Tys) { 580 return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys)); 581 } 582 583 /* Specialized opaque value conversions. 584 */ 585 template<typename T> 586 inline T *unwrap(LLVMValueRef Val) { 587 return cast<T>(unwrap(Val)); 588 } 589 590 inline Value **unwrap(LLVMValueRef *Vals) { 591 return reinterpret_cast<Value**>(Vals); 592 } 593 594 template<typename T> 595 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) { 596 #if DEBUG 597 for (LLVMValueRef *I = Vals, E = Vals + Length; I != E; ++I) 598 cast<T>(*I); 599 #endif 600 return reinterpret_cast<T**>(Vals); 601 } 602 603 inline LLVMValueRef *wrap(const Value **Vals) { 604 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals)); 605 } 606} 607 608#endif /* !defined(__cplusplus) */ 609 610#endif /* !defined(LLVM_C_CORE_H) */ 611