Home | History | Annotate | Download | only in llvm-c
      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 \*===----------------------------------------------------------------------===*/
     14 
     15 #ifndef LLVM_C_CORE_H
     16 #define LLVM_C_CORE_H
     17 
     18 #include "llvm-c/Support.h"
     19 
     20 #ifdef __cplusplus
     21 extern "C" {
     22 #endif
     23 
     24 /**
     25  * @defgroup LLVMC LLVM-C: C interface to LLVM
     26  *
     27  * This module exposes parts of the LLVM library as a C API.
     28  *
     29  * @{
     30  */
     31 
     32 /**
     33  * @defgroup LLVMCTransforms Transforms
     34  */
     35 
     36 /**
     37  * @defgroup LLVMCCore Core
     38  *
     39  * This modules provide an interface to libLLVMCore, which implements
     40  * the LLVM intermediate representation as well as other related types
     41  * and utilities.
     42  *
     43  * LLVM uses a polymorphic type hierarchy which C cannot represent, therefore
     44  * parameters must be passed as base types. Despite the declared types, most
     45  * of the functions provided operate only on branches of the type hierarchy.
     46  * The declared parameter names are descriptive and specify which type is
     47  * required. Additionally, each type hierarchy is documented along with the
     48  * functions that operate upon it. For more detail, refer to LLVM's C++ code.
     49  * If in doubt, refer to Core.cpp, which performs parameter downcasts in the
     50  * form unwrap<RequiredType>(Param).
     51  *
     52  * Many exotic languages can interoperate with C code but have a harder time
     53  * with C++ due to name mangling. So in addition to C, this interface enables
     54  * tools written in such languages.
     55  *
     56  * @{
     57  */
     58 
     59 /**
     60  * @defgroup LLVMCCoreTypes Types and Enumerations
     61  *
     62  * @{
     63  */
     64 
     65 /* Opaque types. */
     66 
     67 /**
     68  * The top-level container for all LLVM global data. See the LLVMContext class.
     69  */
     70 typedef struct LLVMOpaqueContext *LLVMContextRef;
     71 
     72 /**
     73  * The top-level container for all other LLVM Intermediate Representation (IR)
     74  * objects.
     75  *
     76  * @see llvm::Module
     77  */
     78 typedef struct LLVMOpaqueModule *LLVMModuleRef;
     79 
     80 /**
     81  * Each value in the LLVM IR has a type, an LLVMTypeRef.
     82  *
     83  * @see llvm::Type
     84  */
     85 typedef struct LLVMOpaqueType *LLVMTypeRef;
     86 
     87 /**
     88  * Represents an individual value in LLVM IR.
     89  *
     90  * This models llvm::Value.
     91  */
     92 typedef struct LLVMOpaqueValue *LLVMValueRef;
     93 
     94 /**
     95  * Represents a basic block of instructions in LLVM IR.
     96  *
     97  * This models llvm::BasicBlock.
     98  */
     99 typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
    100 
    101 /**
    102  * Represents an LLVM basic block builder.
    103  *
    104  * This models llvm::IRBuilder.
    105  */
    106 typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
    107 
    108 /**
    109  * Interface used to provide a module to JIT or interpreter.
    110  * This is now just a synonym for llvm::Module, but we have to keep using the
    111  * different type to keep binary compatibility.
    112  */
    113 typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
    114 
    115 /** @see llvm::PassManagerBase */
    116 typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
    117 
    118 /** @see llvm::PassRegistry */
    119 typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
    120 
    121 /**
    122  * Used to get the users and usees of a Value.
    123  *
    124  * @see llvm::Use */
    125 typedef struct LLVMOpaqueUse *LLVMUseRef;
    126 
    127 
    128 /**
    129  * @see llvm::DiagnosticInfo
    130  */
    131 typedef struct LLVMOpaqueDiagnosticInfo *LLVMDiagnosticInfoRef;
    132 
    133 typedef enum {
    134     LLVMZExtAttribute       = 1<<0,
    135     LLVMSExtAttribute       = 1<<1,
    136     LLVMNoReturnAttribute   = 1<<2,
    137     LLVMInRegAttribute      = 1<<3,
    138     LLVMStructRetAttribute  = 1<<4,
    139     LLVMNoUnwindAttribute   = 1<<5,
    140     LLVMNoAliasAttribute    = 1<<6,
    141     LLVMByValAttribute      = 1<<7,
    142     LLVMNestAttribute       = 1<<8,
    143     LLVMReadNoneAttribute   = 1<<9,
    144     LLVMReadOnlyAttribute   = 1<<10,
    145     LLVMNoInlineAttribute   = 1<<11,
    146     LLVMAlwaysInlineAttribute    = 1<<12,
    147     LLVMOptimizeForSizeAttribute = 1<<13,
    148     LLVMStackProtectAttribute    = 1<<14,
    149     LLVMStackProtectReqAttribute = 1<<15,
    150     LLVMAlignment = 31<<16,
    151     LLVMNoCaptureAttribute  = 1<<21,
    152     LLVMNoRedZoneAttribute  = 1<<22,
    153     LLVMNoImplicitFloatAttribute = 1<<23,
    154     LLVMNakedAttribute      = 1<<24,
    155     LLVMInlineHintAttribute = 1<<25,
    156     LLVMStackAlignment = 7<<26,
    157     LLVMReturnsTwice = 1 << 29,
    158     LLVMUWTable = 1 << 30,
    159     LLVMNonLazyBind = 1 << 31
    160 
    161     /* FIXME: These attributes are currently not included in the C API as
    162        a temporary measure until the API/ABI impact to the C API is understood
    163        and the path forward agreed upon.
    164     LLVMAddressSafety = 1ULL << 32,
    165     LLVMStackProtectStrongAttribute = 1ULL<<33,
    166     LLVMCold = 1ULL << 34,
    167     LLVMOptimizeNone = 1ULL << 35,
    168     LLVMInAllocaAttribute = 1ULL << 36,
    169     LLVMNonNullAttribute = 1ULL << 37,
    170     LLVMJumpTableAttribute = 1ULL << 38,
    171     */
    172 } LLVMAttribute;
    173 
    174 typedef enum {
    175   /* Terminator Instructions */
    176   LLVMRet            = 1,
    177   LLVMBr             = 2,
    178   LLVMSwitch         = 3,
    179   LLVMIndirectBr     = 4,
    180   LLVMInvoke         = 5,
    181   /* removed 6 due to API changes */
    182   LLVMUnreachable    = 7,
    183 
    184   /* Standard Binary Operators */
    185   LLVMAdd            = 8,
    186   LLVMFAdd           = 9,
    187   LLVMSub            = 10,
    188   LLVMFSub           = 11,
    189   LLVMMul            = 12,
    190   LLVMFMul           = 13,
    191   LLVMUDiv           = 14,
    192   LLVMSDiv           = 15,
    193   LLVMFDiv           = 16,
    194   LLVMURem           = 17,
    195   LLVMSRem           = 18,
    196   LLVMFRem           = 19,
    197 
    198   /* Logical Operators */
    199   LLVMShl            = 20,
    200   LLVMLShr           = 21,
    201   LLVMAShr           = 22,
    202   LLVMAnd            = 23,
    203   LLVMOr             = 24,
    204   LLVMXor            = 25,
    205 
    206   /* Memory Operators */
    207   LLVMAlloca         = 26,
    208   LLVMLoad           = 27,
    209   LLVMStore          = 28,
    210   LLVMGetElementPtr  = 29,
    211 
    212   /* Cast Operators */
    213   LLVMTrunc          = 30,
    214   LLVMZExt           = 31,
    215   LLVMSExt           = 32,
    216   LLVMFPToUI         = 33,
    217   LLVMFPToSI         = 34,
    218   LLVMUIToFP         = 35,
    219   LLVMSIToFP         = 36,
    220   LLVMFPTrunc        = 37,
    221   LLVMFPExt          = 38,
    222   LLVMPtrToInt       = 39,
    223   LLVMIntToPtr       = 40,
    224   LLVMBitCast        = 41,
    225   LLVMAddrSpaceCast  = 60,
    226 
    227   /* Other Operators */
    228   LLVMICmp           = 42,
    229   LLVMFCmp           = 43,
    230   LLVMPHI            = 44,
    231   LLVMCall           = 45,
    232   LLVMSelect         = 46,
    233   LLVMUserOp1        = 47,
    234   LLVMUserOp2        = 48,
    235   LLVMVAArg          = 49,
    236   LLVMExtractElement = 50,
    237   LLVMInsertElement  = 51,
    238   LLVMShuffleVector  = 52,
    239   LLVMExtractValue   = 53,
    240   LLVMInsertValue    = 54,
    241 
    242   /* Atomic operators */
    243   LLVMFence          = 55,
    244   LLVMAtomicCmpXchg  = 56,
    245   LLVMAtomicRMW      = 57,
    246 
    247   /* Exception Handling Operators */
    248   LLVMResume         = 58,
    249   LLVMLandingPad     = 59
    250 
    251 } LLVMOpcode;
    252 
    253 typedef enum {
    254   LLVMVoidTypeKind,        /**< type with no size */
    255   LLVMHalfTypeKind,        /**< 16 bit floating point type */
    256   LLVMFloatTypeKind,       /**< 32 bit floating point type */
    257   LLVMDoubleTypeKind,      /**< 64 bit floating point type */
    258   LLVMX86_FP80TypeKind,    /**< 80 bit floating point type (X87) */
    259   LLVMFP128TypeKind,       /**< 128 bit floating point type (112-bit mantissa)*/
    260   LLVMPPC_FP128TypeKind,   /**< 128 bit floating point type (two 64-bits) */
    261   LLVMLabelTypeKind,       /**< Labels */
    262   LLVMIntegerTypeKind,     /**< Arbitrary bit width integers */
    263   LLVMFunctionTypeKind,    /**< Functions */
    264   LLVMStructTypeKind,      /**< Structures */
    265   LLVMArrayTypeKind,       /**< Arrays */
    266   LLVMPointerTypeKind,     /**< Pointers */
    267   LLVMVectorTypeKind,      /**< SIMD 'packed' format, or other vector type */
    268   LLVMMetadataTypeKind,    /**< Metadata */
    269   LLVMX86_MMXTypeKind      /**< X86 MMX */
    270 } LLVMTypeKind;
    271 
    272 typedef enum {
    273   LLVMExternalLinkage,    /**< Externally visible function */
    274   LLVMAvailableExternallyLinkage,
    275   LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
    276   LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
    277                             equivalent. */
    278   LLVMLinkOnceODRAutoHideLinkage, /**< Obsolete */
    279   LLVMWeakAnyLinkage,     /**< Keep one copy of function when linking (weak) */
    280   LLVMWeakODRLinkage,     /**< Same, but only replaced by something
    281                             equivalent. */
    282   LLVMAppendingLinkage,   /**< Special purpose, only applies to global arrays */
    283   LLVMInternalLinkage,    /**< Rename collisions when linking (static
    284                                functions) */
    285   LLVMPrivateLinkage,     /**< Like Internal, but omit from symbol table */
    286   LLVMDLLImportLinkage,   /**< Obsolete */
    287   LLVMDLLExportLinkage,   /**< Obsolete */
    288   LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
    289   LLVMGhostLinkage,       /**< Obsolete */
    290   LLVMCommonLinkage,      /**< Tentative definitions */
    291   LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
    292   LLVMLinkerPrivateWeakLinkage /**< Like LinkerPrivate, but is weak. */
    293 } LLVMLinkage;
    294 
    295 typedef enum {
    296   LLVMDefaultVisibility,  /**< The GV is visible */
    297   LLVMHiddenVisibility,   /**< The GV is hidden */
    298   LLVMProtectedVisibility /**< The GV is protected */
    299 } LLVMVisibility;
    300 
    301 typedef enum {
    302   LLVMDefaultStorageClass   = 0,
    303   LLVMDLLImportStorageClass = 1, /**< Function to be imported from DLL. */
    304   LLVMDLLExportStorageClass = 2  /**< Function to be accessible from DLL. */
    305 } LLVMDLLStorageClass;
    306 
    307 typedef enum {
    308   LLVMCCallConv           = 0,
    309   LLVMFastCallConv        = 8,
    310   LLVMColdCallConv        = 9,
    311   LLVMWebKitJSCallConv    = 12,
    312   LLVMAnyRegCallConv      = 13,
    313   LLVMX86StdcallCallConv  = 64,
    314   LLVMX86FastcallCallConv = 65
    315 } LLVMCallConv;
    316 
    317 typedef enum {
    318   LLVMIntEQ = 32, /**< equal */
    319   LLVMIntNE,      /**< not equal */
    320   LLVMIntUGT,     /**< unsigned greater than */
    321   LLVMIntUGE,     /**< unsigned greater or equal */
    322   LLVMIntULT,     /**< unsigned less than */
    323   LLVMIntULE,     /**< unsigned less or equal */
    324   LLVMIntSGT,     /**< signed greater than */
    325   LLVMIntSGE,     /**< signed greater or equal */
    326   LLVMIntSLT,     /**< signed less than */
    327   LLVMIntSLE      /**< signed less or equal */
    328 } LLVMIntPredicate;
    329 
    330 typedef enum {
    331   LLVMRealPredicateFalse, /**< Always false (always folded) */
    332   LLVMRealOEQ,            /**< True if ordered and equal */
    333   LLVMRealOGT,            /**< True if ordered and greater than */
    334   LLVMRealOGE,            /**< True if ordered and greater than or equal */
    335   LLVMRealOLT,            /**< True if ordered and less than */
    336   LLVMRealOLE,            /**< True if ordered and less than or equal */
    337   LLVMRealONE,            /**< True if ordered and operands are unequal */
    338   LLVMRealORD,            /**< True if ordered (no nans) */
    339   LLVMRealUNO,            /**< True if unordered: isnan(X) | isnan(Y) */
    340   LLVMRealUEQ,            /**< True if unordered or equal */
    341   LLVMRealUGT,            /**< True if unordered or greater than */
    342   LLVMRealUGE,            /**< True if unordered, greater than, or equal */
    343   LLVMRealULT,            /**< True if unordered or less than */
    344   LLVMRealULE,            /**< True if unordered, less than, or equal */
    345   LLVMRealUNE,            /**< True if unordered or not equal */
    346   LLVMRealPredicateTrue   /**< Always true (always folded) */
    347 } LLVMRealPredicate;
    348 
    349 typedef enum {
    350   LLVMLandingPadCatch,    /**< A catch clause   */
    351   LLVMLandingPadFilter    /**< A filter clause  */
    352 } LLVMLandingPadClauseTy;
    353 
    354 typedef enum {
    355   LLVMNotThreadLocal = 0,
    356   LLVMGeneralDynamicTLSModel,
    357   LLVMLocalDynamicTLSModel,
    358   LLVMInitialExecTLSModel,
    359   LLVMLocalExecTLSModel
    360 } LLVMThreadLocalMode;
    361 
    362 typedef enum {
    363   LLVMAtomicOrderingNotAtomic = 0, /**< A load or store which is not atomic */
    364   LLVMAtomicOrderingUnordered = 1, /**< Lowest level of atomicity, guarantees
    365                                      somewhat sane results, lock free. */
    366   LLVMAtomicOrderingMonotonic = 2, /**< guarantees that if you take all the
    367                                      operations affecting a specific address,
    368                                      a consistent ordering exists */
    369   LLVMAtomicOrderingAcquire = 4, /**< Acquire provides a barrier of the sort
    370                                    necessary to acquire a lock to access other
    371                                    memory with normal loads and stores. */
    372   LLVMAtomicOrderingRelease = 5, /**< Release is similar to Acquire, but with
    373                                    a barrier of the sort necessary to release
    374                                    a lock. */
    375   LLVMAtomicOrderingAcquireRelease = 6, /**< provides both an Acquire and a
    376                                           Release barrier (for fences and
    377                                           operations which both read and write
    378                                            memory). */
    379   LLVMAtomicOrderingSequentiallyConsistent = 7 /**< provides Acquire semantics
    380                                                  for loads and Release
    381                                                  semantics for stores.
    382                                                  Additionally, it guarantees
    383                                                  that a total ordering exists
    384                                                  between all
    385                                                  SequentiallyConsistent
    386                                                  operations. */
    387 } LLVMAtomicOrdering;
    388 
    389 typedef enum {
    390     LLVMAtomicRMWBinOpXchg, /**< Set the new value and return the one old */
    391     LLVMAtomicRMWBinOpAdd, /**< Add a value and return the old one */
    392     LLVMAtomicRMWBinOpSub, /**< Subtract a value and return the old one */
    393     LLVMAtomicRMWBinOpAnd, /**< And a value and return the old one */
    394     LLVMAtomicRMWBinOpNand, /**< Not-And a value and return the old one */
    395     LLVMAtomicRMWBinOpOr, /**< OR a value and return the old one */
    396     LLVMAtomicRMWBinOpXor, /**< Xor a value and return the old one */
    397     LLVMAtomicRMWBinOpMax, /**< Sets the value if it's greater than the
    398                              original using a signed comparison and return
    399                              the old one */
    400     LLVMAtomicRMWBinOpMin, /**< Sets the value if it's Smaller than the
    401                              original using a signed comparison and return
    402                              the old one */
    403     LLVMAtomicRMWBinOpUMax, /**< Sets the value if it's greater than the
    404                              original using an unsigned comparison and return
    405                              the old one */
    406     LLVMAtomicRMWBinOpUMin /**< Sets the value if it's greater than the
    407                              original using an unsigned comparison  and return
    408                              the old one */
    409 } LLVMAtomicRMWBinOp;
    410 
    411 typedef enum {
    412     LLVMDSError,
    413     LLVMDSWarning,
    414     LLVMDSRemark,
    415     LLVMDSNote
    416 } LLVMDiagnosticSeverity;
    417 
    418 /**
    419  * @}
    420  */
    421 
    422 void LLVMInitializeCore(LLVMPassRegistryRef R);
    423 
    424 /** Deallocate and destroy all ManagedStatic variables.
    425     @see llvm::llvm_shutdown
    426     @see ManagedStatic */
    427 void LLVMShutdown(void);
    428 
    429 
    430 /*===-- Error handling ----------------------------------------------------===*/
    431 
    432 char *LLVMCreateMessage(const char *Message);
    433 void LLVMDisposeMessage(char *Message);
    434 
    435 typedef void (*LLVMFatalErrorHandler)(const char *Reason);
    436 
    437 /**
    438  * Install a fatal error handler. By default, if LLVM detects a fatal error, it
    439  * will call exit(1). This may not be appropriate in many contexts. For example,
    440  * doing exit(1) will bypass many crash reporting/tracing system tools. This
    441  * function allows you to install a callback that will be invoked prior to the
    442  * call to exit(1).
    443  */
    444 void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler);
    445 
    446 /**
    447  * Reset the fatal error handler. This resets LLVM's fatal error handling
    448  * behavior to the default.
    449  */
    450 void LLVMResetFatalErrorHandler(void);
    451 
    452 /**
    453  * Enable LLVM's built-in stack trace code. This intercepts the OS's crash
    454  * signals and prints which component of LLVM you were in at the time if the
    455  * crash.
    456  */
    457 void LLVMEnablePrettyStackTrace(void);
    458 
    459 /**
    460  * @defgroup LLVMCCoreContext Contexts
    461  *
    462  * Contexts are execution states for the core LLVM IR system.
    463  *
    464  * Most types are tied to a context instance. Multiple contexts can
    465  * exist simultaneously. A single context is not thread safe. However,
    466  * different contexts can execute on different threads simultaneously.
    467  *
    468  * @{
    469  */
    470 
    471 typedef void (*LLVMDiagnosticHandler)(LLVMDiagnosticInfoRef, void *);
    472 typedef void (*LLVMYieldCallback)(LLVMContextRef, void *);
    473 
    474 /**
    475  * Create a new context.
    476  *
    477  * Every call to this function should be paired with a call to
    478  * LLVMContextDispose() or the context will leak memory.
    479  */
    480 LLVMContextRef LLVMContextCreate(void);
    481 
    482 /**
    483  * Obtain the global context instance.
    484  */
    485 LLVMContextRef LLVMGetGlobalContext(void);
    486 
    487 /**
    488  * Set the diagnostic handler for this context.
    489  */
    490 void LLVMContextSetDiagnosticHandler(LLVMContextRef C,
    491                                      LLVMDiagnosticHandler Handler,
    492                                      void *DiagnosticContext);
    493 
    494 /**
    495  * Set the yield callback function for this context.
    496  *
    497  * @see LLVMContext::setYieldCallback()
    498  */
    499 void LLVMContextSetYieldCallback(LLVMContextRef C, LLVMYieldCallback Callback,
    500                                  void *OpaqueHandle);
    501 
    502 /**
    503  * Destroy a context instance.
    504  *
    505  * This should be called for every call to LLVMContextCreate() or memory
    506  * will be leaked.
    507  */
    508 void LLVMContextDispose(LLVMContextRef C);
    509 
    510 /**
    511  * Return a string representation of the DiagnosticInfo. Use
    512  * LLVMDisposeMessage to free the string.
    513  *
    514  * @see DiagnosticInfo::print()
    515  */
    516 char *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI);
    517 
    518 /**
    519  * Return an enum LLVMDiagnosticSeverity.
    520  *
    521  * @see DiagnosticInfo::getSeverity()
    522  */
    523 LLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI);
    524 
    525 unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
    526                                   unsigned SLen);
    527 unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
    528 
    529 /**
    530  * @}
    531  */
    532 
    533 /**
    534  * @defgroup LLVMCCoreModule Modules
    535  *
    536  * Modules represent the top-level structure in an LLVM program. An LLVM
    537  * module is effectively a translation unit or a collection of
    538  * translation units merged together.
    539  *
    540  * @{
    541  */
    542 
    543 /**
    544  * Create a new, empty module in the global context.
    545  *
    546  * This is equivalent to calling LLVMModuleCreateWithNameInContext with
    547  * LLVMGetGlobalContext() as the context parameter.
    548  *
    549  * Every invocation should be paired with LLVMDisposeModule() or memory
    550  * will be leaked.
    551  */
    552 LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
    553 
    554 /**
    555  * Create a new, empty module in a specific context.
    556  *
    557  * Every invocation should be paired with LLVMDisposeModule() or memory
    558  * will be leaked.
    559  */
    560 LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
    561                                                 LLVMContextRef C);
    562 
    563 /**
    564  * Destroy a module instance.
    565  *
    566  * This must be called for every created module or memory will be
    567  * leaked.
    568  */
    569 void LLVMDisposeModule(LLVMModuleRef M);
    570 
    571 /**
    572  * Obtain the data layout for a module.
    573  *
    574  * @see Module::getDataLayout()
    575  */
    576 const char *LLVMGetDataLayout(LLVMModuleRef M);
    577 
    578 /**
    579  * Set the data layout for a module.
    580  *
    581  * @see Module::setDataLayout()
    582  */
    583 void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
    584 
    585 /**
    586  * Obtain the target triple for a module.
    587  *
    588  * @see Module::getTargetTriple()
    589  */
    590 const char *LLVMGetTarget(LLVMModuleRef M);
    591 
    592 /**
    593  * Set the target triple for a module.
    594  *
    595  * @see Module::setTargetTriple()
    596  */
    597 void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
    598 
    599 /**
    600  * Dump a representation of a module to stderr.
    601  *
    602  * @see Module::dump()
    603  */
    604 void LLVMDumpModule(LLVMModuleRef M);
    605 
    606 /**
    607  * Print a representation of a module to a file. The ErrorMessage needs to be
    608  * disposed with LLVMDisposeMessage. Returns 0 on success, 1 otherwise.
    609  *
    610  * @see Module::print()
    611  */
    612 LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename,
    613                                char **ErrorMessage);
    614 
    615 /**
    616  * Return a string representation of the module. Use
    617  * LLVMDisposeMessage to free the string.
    618  *
    619  * @see Module::print()
    620  */
    621 char *LLVMPrintModuleToString(LLVMModuleRef M);
    622 
    623 /**
    624  * Set inline assembly for a module.
    625  *
    626  * @see Module::setModuleInlineAsm()
    627  */
    628 void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
    629 
    630 /**
    631  * Obtain the context to which this module is associated.
    632  *
    633  * @see Module::getContext()
    634  */
    635 LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
    636 
    637 /**
    638  * Obtain a Type from a module by its registered name.
    639  */
    640 LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
    641 
    642 /**
    643  * Obtain the number of operands for named metadata in a module.
    644  *
    645  * @see llvm::Module::getNamedMetadata()
    646  */
    647 unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name);
    648 
    649 /**
    650  * Obtain the named metadata operands for a module.
    651  *
    652  * The passed LLVMValueRef pointer should refer to an array of
    653  * LLVMValueRef at least LLVMGetNamedMetadataNumOperands long. This
    654  * array will be populated with the LLVMValueRef instances. Each
    655  * instance corresponds to a llvm::MDNode.
    656  *
    657  * @see llvm::Module::getNamedMetadata()
    658  * @see llvm::MDNode::getOperand()
    659  */
    660 void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest);
    661 
    662 /**
    663  * Add an operand to named metadata.
    664  *
    665  * @see llvm::Module::getNamedMetadata()
    666  * @see llvm::MDNode::addOperand()
    667  */
    668 void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char* name,
    669                                  LLVMValueRef Val);
    670 
    671 /**
    672  * Add a function to a module under a specified name.
    673  *
    674  * @see llvm::Function::Create()
    675  */
    676 LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
    677                              LLVMTypeRef FunctionTy);
    678 
    679 /**
    680  * Obtain a Function value from a Module by its name.
    681  *
    682  * The returned value corresponds to a llvm::Function value.
    683  *
    684  * @see llvm::Module::getFunction()
    685  */
    686 LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
    687 
    688 /**
    689  * Obtain an iterator to the first Function in a Module.
    690  *
    691  * @see llvm::Module::begin()
    692  */
    693 LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
    694 
    695 /**
    696  * Obtain an iterator to the last Function in a Module.
    697  *
    698  * @see llvm::Module::end()
    699  */
    700 LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
    701 
    702 /**
    703  * Advance a Function iterator to the next Function.
    704  *
    705  * Returns NULL if the iterator was already at the end and there are no more
    706  * functions.
    707  */
    708 LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
    709 
    710 /**
    711  * Decrement a Function iterator to the previous Function.
    712  *
    713  * Returns NULL if the iterator was already at the beginning and there are
    714  * no previous functions.
    715  */
    716 LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
    717 
    718 /**
    719  * @}
    720  */
    721 
    722 /**
    723  * @defgroup LLVMCCoreType Types
    724  *
    725  * Types represent the type of a value.
    726  *
    727  * Types are associated with a context instance. The context internally
    728  * deduplicates types so there is only 1 instance of a specific type
    729  * alive at a time. In other words, a unique type is shared among all
    730  * consumers within a context.
    731  *
    732  * A Type in the C API corresponds to llvm::Type.
    733  *
    734  * Types have the following hierarchy:
    735  *
    736  *   types:
    737  *     integer type
    738  *     real type
    739  *     function type
    740  *     sequence types:
    741  *       array type
    742  *       pointer type
    743  *       vector type
    744  *     void type
    745  *     label type
    746  *     opaque type
    747  *
    748  * @{
    749  */
    750 
    751 /**
    752  * Obtain the enumerated type of a Type instance.
    753  *
    754  * @see llvm::Type:getTypeID()
    755  */
    756 LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
    757 
    758 /**
    759  * Whether the type has a known size.
    760  *
    761  * Things that don't have a size are abstract types, labels, and void.a
    762  *
    763  * @see llvm::Type::isSized()
    764  */
    765 LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
    766 
    767 /**
    768  * Obtain the context to which this type instance is associated.
    769  *
    770  * @see llvm::Type::getContext()
    771  */
    772 LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
    773 
    774 /**
    775  * Dump a representation of a type to stderr.
    776  *
    777  * @see llvm::Type::dump()
    778  */
    779 void LLVMDumpType(LLVMTypeRef Val);
    780 
    781 /**
    782  * Return a string representation of the type. Use
    783  * LLVMDisposeMessage to free the string.
    784  *
    785  * @see llvm::Type::print()
    786  */
    787 char *LLVMPrintTypeToString(LLVMTypeRef Val);
    788 
    789 /**
    790  * @defgroup LLVMCCoreTypeInt Integer Types
    791  *
    792  * Functions in this section operate on integer types.
    793  *
    794  * @{
    795  */
    796 
    797 /**
    798  * Obtain an integer type from a context with specified bit width.
    799  */
    800 LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
    801 LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
    802 LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
    803 LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
    804 LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
    805 LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
    806 
    807 /**
    808  * Obtain an integer type from the global context with a specified bit
    809  * width.
    810  */
    811 LLVMTypeRef LLVMInt1Type(void);
    812 LLVMTypeRef LLVMInt8Type(void);
    813 LLVMTypeRef LLVMInt16Type(void);
    814 LLVMTypeRef LLVMInt32Type(void);
    815 LLVMTypeRef LLVMInt64Type(void);
    816 LLVMTypeRef LLVMIntType(unsigned NumBits);
    817 unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
    818 
    819 /**
    820  * @}
    821  */
    822 
    823 /**
    824  * @defgroup LLVMCCoreTypeFloat Floating Point Types
    825  *
    826  * @{
    827  */
    828 
    829 /**
    830  * Obtain a 16-bit floating point type from a context.
    831  */
    832 LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C);
    833 
    834 /**
    835  * Obtain a 32-bit floating point type from a context.
    836  */
    837 LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
    838 
    839 /**
    840  * Obtain a 64-bit floating point type from a context.
    841  */
    842 LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
    843 
    844 /**
    845  * Obtain a 80-bit floating point type (X87) from a context.
    846  */
    847 LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
    848 
    849 /**
    850  * Obtain a 128-bit floating point type (112-bit mantissa) from a
    851  * context.
    852  */
    853 LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
    854 
    855 /**
    856  * Obtain a 128-bit floating point type (two 64-bits) from a context.
    857  */
    858 LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
    859 
    860 /**
    861  * Obtain a floating point type from the global context.
    862  *
    863  * These map to the functions in this group of the same name.
    864  */
    865 LLVMTypeRef LLVMHalfType(void);
    866 LLVMTypeRef LLVMFloatType(void);
    867 LLVMTypeRef LLVMDoubleType(void);
    868 LLVMTypeRef LLVMX86FP80Type(void);
    869 LLVMTypeRef LLVMFP128Type(void);
    870 LLVMTypeRef LLVMPPCFP128Type(void);
    871 
    872 /**
    873  * @}
    874  */
    875 
    876 /**
    877  * @defgroup LLVMCCoreTypeFunction Function Types
    878  *
    879  * @{
    880  */
    881 
    882 /**
    883  * Obtain a function type consisting of a specified signature.
    884  *
    885  * The function is defined as a tuple of a return Type, a list of
    886  * parameter types, and whether the function is variadic.
    887  */
    888 LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
    889                              LLVMTypeRef *ParamTypes, unsigned ParamCount,
    890                              LLVMBool IsVarArg);
    891 
    892 /**
    893  * Returns whether a function type is variadic.
    894  */
    895 LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
    896 
    897 /**
    898  * Obtain the Type this function Type returns.
    899  */
    900 LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
    901 
    902 /**
    903  * Obtain the number of parameters this function accepts.
    904  */
    905 unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
    906 
    907 /**
    908  * Obtain the types of a function's parameters.
    909  *
    910  * The Dest parameter should point to a pre-allocated array of
    911  * LLVMTypeRef at least LLVMCountParamTypes() large. On return, the
    912  * first LLVMCountParamTypes() entries in the array will be populated
    913  * with LLVMTypeRef instances.
    914  *
    915  * @param FunctionTy The function type to operate on.
    916  * @param Dest Memory address of an array to be filled with result.
    917  */
    918 void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
    919 
    920 /**
    921  * @}
    922  */
    923 
    924 /**
    925  * @defgroup LLVMCCoreTypeStruct Structure Types
    926  *
    927  * These functions relate to LLVMTypeRef instances.
    928  *
    929  * @see llvm::StructType
    930  *
    931  * @{
    932  */
    933 
    934 /**
    935  * Create a new structure type in a context.
    936  *
    937  * A structure is specified by a list of inner elements/types and
    938  * whether these can be packed together.
    939  *
    940  * @see llvm::StructType::create()
    941  */
    942 LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
    943                                     unsigned ElementCount, LLVMBool Packed);
    944 
    945 /**
    946  * Create a new structure type in the global context.
    947  *
    948  * @see llvm::StructType::create()
    949  */
    950 LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
    951                            LLVMBool Packed);
    952 
    953 /**
    954  * Create an empty structure in a context having a specified name.
    955  *
    956  * @see llvm::StructType::create()
    957  */
    958 LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
    959 
    960 /**
    961  * Obtain the name of a structure.
    962  *
    963  * @see llvm::StructType::getName()
    964  */
    965 const char *LLVMGetStructName(LLVMTypeRef Ty);
    966 
    967 /**
    968  * Set the contents of a structure type.
    969  *
    970  * @see llvm::StructType::setBody()
    971  */
    972 void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
    973                        unsigned ElementCount, LLVMBool Packed);
    974 
    975 /**
    976  * Get the number of elements defined inside the structure.
    977  *
    978  * @see llvm::StructType::getNumElements()
    979  */
    980 unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
    981 
    982 /**
    983  * Get the elements within a structure.
    984  *
    985  * The function is passed the address of a pre-allocated array of
    986  * LLVMTypeRef at least LLVMCountStructElementTypes() long. After
    987  * invocation, this array will be populated with the structure's
    988  * elements. The objects in the destination array will have a lifetime
    989  * of the structure type itself, which is the lifetime of the context it
    990  * is contained in.
    991  */
    992 void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
    993 
    994 /**
    995  * Determine whether a structure is packed.
    996  *
    997  * @see llvm::StructType::isPacked()
    998  */
    999 LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
   1000 
   1001 /**
   1002  * Determine whether a structure is opaque.
   1003  *
   1004  * @see llvm::StructType::isOpaque()
   1005  */
   1006 LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
   1007 
   1008 /**
   1009  * @}
   1010  */
   1011 
   1012 
   1013 /**
   1014  * @defgroup LLVMCCoreTypeSequential Sequential Types
   1015  *
   1016  * Sequential types represents "arrays" of types. This is a super class
   1017  * for array, vector, and pointer types.
   1018  *
   1019  * @{
   1020  */
   1021 
   1022 /**
   1023  * Obtain the type of elements within a sequential type.
   1024  *
   1025  * This works on array, vector, and pointer types.
   1026  *
   1027  * @see llvm::SequentialType::getElementType()
   1028  */
   1029 LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
   1030 
   1031 /**
   1032  * Create a fixed size array type that refers to a specific type.
   1033  *
   1034  * The created type will exist in the context that its element type
   1035  * exists in.
   1036  *
   1037  * @see llvm::ArrayType::get()
   1038  */
   1039 LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
   1040 
   1041 /**
   1042  * Obtain the length of an array type.
   1043  *
   1044  * This only works on types that represent arrays.
   1045  *
   1046  * @see llvm::ArrayType::getNumElements()
   1047  */
   1048 unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
   1049 
   1050 /**
   1051  * Create a pointer type that points to a defined type.
   1052  *
   1053  * The created type will exist in the context that its pointee type
   1054  * exists in.
   1055  *
   1056  * @see llvm::PointerType::get()
   1057  */
   1058 LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
   1059 
   1060 /**
   1061  * Obtain the address space of a pointer type.
   1062  *
   1063  * This only works on types that represent pointers.
   1064  *
   1065  * @see llvm::PointerType::getAddressSpace()
   1066  */
   1067 unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
   1068 
   1069 /**
   1070  * Create a vector type that contains a defined type and has a specific
   1071  * number of elements.
   1072  *
   1073  * The created type will exist in the context thats its element type
   1074  * exists in.
   1075  *
   1076  * @see llvm::VectorType::get()
   1077  */
   1078 LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
   1079 
   1080 /**
   1081  * Obtain the number of elements in a vector type.
   1082  *
   1083  * This only works on types that represent vectors.
   1084  *
   1085  * @see llvm::VectorType::getNumElements()
   1086  */
   1087 unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
   1088 
   1089 /**
   1090  * @}
   1091  */
   1092 
   1093 /**
   1094  * @defgroup LLVMCCoreTypeOther Other Types
   1095  *
   1096  * @{
   1097  */
   1098 
   1099 /**
   1100  * Create a void type in a context.
   1101  */
   1102 LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
   1103 
   1104 /**
   1105  * Create a label type in a context.
   1106  */
   1107 LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
   1108 
   1109 /**
   1110  * Create a X86 MMX type in a context.
   1111  */
   1112 LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
   1113 
   1114 /**
   1115  * These are similar to the above functions except they operate on the
   1116  * global context.
   1117  */
   1118 LLVMTypeRef LLVMVoidType(void);
   1119 LLVMTypeRef LLVMLabelType(void);
   1120 LLVMTypeRef LLVMX86MMXType(void);
   1121 
   1122 /**
   1123  * @}
   1124  */
   1125 
   1126 /**
   1127  * @}
   1128  */
   1129 
   1130 /**
   1131  * @defgroup LLVMCCoreValues Values
   1132  *
   1133  * The bulk of LLVM's object model consists of values, which comprise a very
   1134  * rich type hierarchy.
   1135  *
   1136  * LLVMValueRef essentially represents llvm::Value. There is a rich
   1137  * hierarchy of classes within this type. Depending on the instance
   1138  * obtained, not all APIs are available.
   1139  *
   1140  * Callers can determine the type of an LLVMValueRef by calling the
   1141  * LLVMIsA* family of functions (e.g. LLVMIsAArgument()). These
   1142  * functions are defined by a macro, so it isn't obvious which are
   1143  * available by looking at the Doxygen source code. Instead, look at the
   1144  * source definition of LLVM_FOR_EACH_VALUE_SUBCLASS and note the list
   1145  * of value names given. These value names also correspond to classes in
   1146  * the llvm::Value hierarchy.
   1147  *
   1148  * @{
   1149  */
   1150 
   1151 #define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
   1152   macro(Argument)                           \
   1153   macro(BasicBlock)                         \
   1154   macro(InlineAsm)                          \
   1155   macro(MDNode)                             \
   1156   macro(MDString)                           \
   1157   macro(User)                               \
   1158     macro(Constant)                         \
   1159       macro(BlockAddress)                   \
   1160       macro(ConstantAggregateZero)          \
   1161       macro(ConstantArray)                  \
   1162       macro(ConstantDataSequential)         \
   1163         macro(ConstantDataArray)            \
   1164         macro(ConstantDataVector)           \
   1165       macro(ConstantExpr)                   \
   1166       macro(ConstantFP)                     \
   1167       macro(ConstantInt)                    \
   1168       macro(ConstantPointerNull)            \
   1169       macro(ConstantStruct)                 \
   1170       macro(ConstantVector)                 \
   1171       macro(GlobalValue)                    \
   1172         macro(GlobalAlias)                  \
   1173         macro(GlobalObject)                 \
   1174           macro(Function)                   \
   1175           macro(GlobalVariable)             \
   1176       macro(UndefValue)                     \
   1177     macro(Instruction)                      \
   1178       macro(BinaryOperator)                 \
   1179       macro(CallInst)                       \
   1180         macro(IntrinsicInst)                \
   1181           macro(DbgInfoIntrinsic)           \
   1182             macro(DbgDeclareInst)           \
   1183           macro(MemIntrinsic)               \
   1184             macro(MemCpyInst)               \
   1185             macro(MemMoveInst)              \
   1186             macro(MemSetInst)               \
   1187       macro(CmpInst)                        \
   1188         macro(FCmpInst)                     \
   1189         macro(ICmpInst)                     \
   1190       macro(ExtractElementInst)             \
   1191       macro(GetElementPtrInst)              \
   1192       macro(InsertElementInst)              \
   1193       macro(InsertValueInst)                \
   1194       macro(LandingPadInst)                 \
   1195       macro(PHINode)                        \
   1196       macro(SelectInst)                     \
   1197       macro(ShuffleVectorInst)              \
   1198       macro(StoreInst)                      \
   1199       macro(TerminatorInst)                 \
   1200         macro(BranchInst)                   \
   1201         macro(IndirectBrInst)               \
   1202         macro(InvokeInst)                   \
   1203         macro(ReturnInst)                   \
   1204         macro(SwitchInst)                   \
   1205         macro(UnreachableInst)              \
   1206         macro(ResumeInst)                   \
   1207       macro(UnaryInstruction)               \
   1208         macro(AllocaInst)                   \
   1209         macro(CastInst)                     \
   1210           macro(AddrSpaceCastInst)          \
   1211           macro(BitCastInst)                \
   1212           macro(FPExtInst)                  \
   1213           macro(FPToSIInst)                 \
   1214           macro(FPToUIInst)                 \
   1215           macro(FPTruncInst)                \
   1216           macro(IntToPtrInst)               \
   1217           macro(PtrToIntInst)               \
   1218           macro(SExtInst)                   \
   1219           macro(SIToFPInst)                 \
   1220           macro(TruncInst)                  \
   1221           macro(UIToFPInst)                 \
   1222           macro(ZExtInst)                   \
   1223         macro(ExtractValueInst)             \
   1224         macro(LoadInst)                     \
   1225         macro(VAArgInst)
   1226 
   1227 /**
   1228  * @defgroup LLVMCCoreValueGeneral General APIs
   1229  *
   1230  * Functions in this section work on all LLVMValueRef instances,
   1231  * regardless of their sub-type. They correspond to functions available
   1232  * on llvm::Value.
   1233  *
   1234  * @{
   1235  */
   1236 
   1237 /**
   1238  * Obtain the type of a value.
   1239  *
   1240  * @see llvm::Value::getType()
   1241  */
   1242 LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
   1243 
   1244 /**
   1245  * Obtain the string name of a value.
   1246  *
   1247  * @see llvm::Value::getName()
   1248  */
   1249 const char *LLVMGetValueName(LLVMValueRef Val);
   1250 
   1251 /**
   1252  * Set the string name of a value.
   1253  *
   1254  * @see llvm::Value::setName()
   1255  */
   1256 void LLVMSetValueName(LLVMValueRef Val, const char *Name);
   1257 
   1258 /**
   1259  * Dump a representation of a value to stderr.
   1260  *
   1261  * @see llvm::Value::dump()
   1262  */
   1263 void LLVMDumpValue(LLVMValueRef Val);
   1264 
   1265 /**
   1266  * Return a string representation of the value. Use
   1267  * LLVMDisposeMessage to free the string.
   1268  *
   1269  * @see llvm::Value::print()
   1270  */
   1271 char *LLVMPrintValueToString(LLVMValueRef Val);
   1272 
   1273 /**
   1274  * Replace all uses of a value with another one.
   1275  *
   1276  * @see llvm::Value::replaceAllUsesWith()
   1277  */
   1278 void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
   1279 
   1280 /**
   1281  * Determine whether the specified constant instance is constant.
   1282  */
   1283 LLVMBool LLVMIsConstant(LLVMValueRef Val);
   1284 
   1285 /**
   1286  * Determine whether a value instance is undefined.
   1287  */
   1288 LLVMBool LLVMIsUndef(LLVMValueRef Val);
   1289 
   1290 /**
   1291  * Convert value instances between types.
   1292  *
   1293  * Internally, an LLVMValueRef is "pinned" to a specific type. This
   1294  * series of functions allows you to cast an instance to a specific
   1295  * type.
   1296  *
   1297  * If the cast is not valid for the specified type, NULL is returned.
   1298  *
   1299  * @see llvm::dyn_cast_or_null<>
   1300  */
   1301 #define LLVM_DECLARE_VALUE_CAST(name) \
   1302   LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
   1303 LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
   1304 
   1305 /**
   1306  * @}
   1307  */
   1308 
   1309 /**
   1310  * @defgroup LLVMCCoreValueUses Usage
   1311  *
   1312  * This module defines functions that allow you to inspect the uses of a
   1313  * LLVMValueRef.
   1314  *
   1315  * It is possible to obtain an LLVMUseRef for any LLVMValueRef instance.
   1316  * Each LLVMUseRef (which corresponds to a llvm::Use instance) holds a
   1317  * llvm::User and llvm::Value.
   1318  *
   1319  * @{
   1320  */
   1321 
   1322 /**
   1323  * Obtain the first use of a value.
   1324  *
   1325  * Uses are obtained in an iterator fashion. First, call this function
   1326  * to obtain a reference to the first use. Then, call LLVMGetNextUse()
   1327  * on that instance and all subsequently obtained instances until
   1328  * LLVMGetNextUse() returns NULL.
   1329  *
   1330  * @see llvm::Value::use_begin()
   1331  */
   1332 LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
   1333 
   1334 /**
   1335  * Obtain the next use of a value.
   1336  *
   1337  * This effectively advances the iterator. It returns NULL if you are on
   1338  * the final use and no more are available.
   1339  */
   1340 LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
   1341 
   1342 /**
   1343  * Obtain the user value for a user.
   1344  *
   1345  * The returned value corresponds to a llvm::User type.
   1346  *
   1347  * @see llvm::Use::getUser()
   1348  */
   1349 LLVMValueRef LLVMGetUser(LLVMUseRef U);
   1350 
   1351 /**
   1352  * Obtain the value this use corresponds to.
   1353  *
   1354  * @see llvm::Use::get().
   1355  */
   1356 LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
   1357 
   1358 /**
   1359  * @}
   1360  */
   1361 
   1362 /**
   1363  * @defgroup LLVMCCoreValueUser User value
   1364  *
   1365  * Function in this group pertain to LLVMValueRef instances that descent
   1366  * from llvm::User. This includes constants, instructions, and
   1367  * operators.
   1368  *
   1369  * @{
   1370  */
   1371 
   1372 /**
   1373  * Obtain an operand at a specific index in a llvm::User value.
   1374  *
   1375  * @see llvm::User::getOperand()
   1376  */
   1377 LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
   1378 
   1379 /**
   1380  * Set an operand at a specific index in a llvm::User value.
   1381  *
   1382  * @see llvm::User::setOperand()
   1383  */
   1384 void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
   1385 
   1386 /**
   1387  * Obtain the number of operands in a llvm::User value.
   1388  *
   1389  * @see llvm::User::getNumOperands()
   1390  */
   1391 int LLVMGetNumOperands(LLVMValueRef Val);
   1392 
   1393 /**
   1394  * @}
   1395  */
   1396 
   1397 /**
   1398  * @defgroup LLVMCCoreValueConstant Constants
   1399  *
   1400  * This section contains APIs for interacting with LLVMValueRef that
   1401  * correspond to llvm::Constant instances.
   1402  *
   1403  * These functions will work for any LLVMValueRef in the llvm::Constant
   1404  * class hierarchy.
   1405  *
   1406  * @{
   1407  */
   1408 
   1409 /**
   1410  * Obtain a constant value referring to the null instance of a type.
   1411  *
   1412  * @see llvm::Constant::getNullValue()
   1413  */
   1414 LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
   1415 
   1416 /**
   1417  * Obtain a constant value referring to the instance of a type
   1418  * consisting of all ones.
   1419  *
   1420  * This is only valid for integer types.
   1421  *
   1422  * @see llvm::Constant::getAllOnesValue()
   1423  */
   1424 LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty);
   1425 
   1426 /**
   1427  * Obtain a constant value referring to an undefined value of a type.
   1428  *
   1429  * @see llvm::UndefValue::get()
   1430  */
   1431 LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
   1432 
   1433 /**
   1434  * Determine whether a value instance is null.
   1435  *
   1436  * @see llvm::Constant::isNullValue()
   1437  */
   1438 LLVMBool LLVMIsNull(LLVMValueRef Val);
   1439 
   1440 /**
   1441  * Obtain a constant that is a constant pointer pointing to NULL for a
   1442  * specified type.
   1443  */
   1444 LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
   1445 
   1446 /**
   1447  * @defgroup LLVMCCoreValueConstantScalar Scalar constants
   1448  *
   1449  * Functions in this group model LLVMValueRef instances that correspond
   1450  * to constants referring to scalar types.
   1451  *
   1452  * For integer types, the LLVMTypeRef parameter should correspond to a
   1453  * llvm::IntegerType instance and the returned LLVMValueRef will
   1454  * correspond to a llvm::ConstantInt.
   1455  *
   1456  * For floating point types, the LLVMTypeRef returned corresponds to a
   1457  * llvm::ConstantFP.
   1458  *
   1459  * @{
   1460  */
   1461 
   1462 /**
   1463  * Obtain a constant value for an integer type.
   1464  *
   1465  * The returned value corresponds to a llvm::ConstantInt.
   1466  *
   1467  * @see llvm::ConstantInt::get()
   1468  *
   1469  * @param IntTy Integer type to obtain value of.
   1470  * @param N The value the returned instance should refer to.
   1471  * @param SignExtend Whether to sign extend the produced value.
   1472  */
   1473 LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
   1474                           LLVMBool SignExtend);
   1475 
   1476 /**
   1477  * Obtain a constant value for an integer of arbitrary precision.
   1478  *
   1479  * @see llvm::ConstantInt::get()
   1480  */
   1481 LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
   1482                                               unsigned NumWords,
   1483                                               const uint64_t Words[]);
   1484 
   1485 /**
   1486  * Obtain a constant value for an integer parsed from a string.
   1487  *
   1488  * A similar API, LLVMConstIntOfStringAndSize is also available. If the
   1489  * string's length is available, it is preferred to call that function
   1490  * instead.
   1491  *
   1492  * @see llvm::ConstantInt::get()
   1493  */
   1494 LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
   1495                                   uint8_t Radix);
   1496 
   1497 /**
   1498  * Obtain a constant value for an integer parsed from a string with
   1499  * specified length.
   1500  *
   1501  * @see llvm::ConstantInt::get()
   1502  */
   1503 LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
   1504                                          unsigned SLen, uint8_t Radix);
   1505 
   1506 /**
   1507  * Obtain a constant value referring to a double floating point value.
   1508  */
   1509 LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
   1510 
   1511 /**
   1512  * Obtain a constant for a floating point value parsed from a string.
   1513  *
   1514  * A similar API, LLVMConstRealOfStringAndSize is also available. It
   1515  * should be used if the input string's length is known.
   1516  */
   1517 LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
   1518 
   1519 /**
   1520  * Obtain a constant for a floating point value parsed from a string.
   1521  */
   1522 LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
   1523                                           unsigned SLen);
   1524 
   1525 /**
   1526  * Obtain the zero extended value for an integer constant value.
   1527  *
   1528  * @see llvm::ConstantInt::getZExtValue()
   1529  */
   1530 unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
   1531 
   1532 /**
   1533  * Obtain the sign extended value for an integer constant value.
   1534  *
   1535  * @see llvm::ConstantInt::getSExtValue()
   1536  */
   1537 long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
   1538 
   1539 /**
   1540  * @}
   1541  */
   1542 
   1543 /**
   1544  * @defgroup LLVMCCoreValueConstantComposite Composite Constants
   1545  *
   1546  * Functions in this group operate on composite constants.
   1547  *
   1548  * @{
   1549  */
   1550 
   1551 /**
   1552  * Create a ConstantDataSequential and initialize it with a string.
   1553  *
   1554  * @see llvm::ConstantDataArray::getString()
   1555  */
   1556 LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
   1557                                       unsigned Length, LLVMBool DontNullTerminate);
   1558 
   1559 /**
   1560  * Create a ConstantDataSequential with string content in the global context.
   1561  *
   1562  * This is the same as LLVMConstStringInContext except it operates on the
   1563  * global context.
   1564  *
   1565  * @see LLVMConstStringInContext()
   1566  * @see llvm::ConstantDataArray::getString()
   1567  */
   1568 LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
   1569                              LLVMBool DontNullTerminate);
   1570 
   1571 /**
   1572  * Create an anonymous ConstantStruct with the specified values.
   1573  *
   1574  * @see llvm::ConstantStruct::getAnon()
   1575  */
   1576 LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
   1577                                       LLVMValueRef *ConstantVals,
   1578                                       unsigned Count, LLVMBool Packed);
   1579 
   1580 /**
   1581  * Create a ConstantStruct in the global Context.
   1582  *
   1583  * This is the same as LLVMConstStructInContext except it operates on the
   1584  * global Context.
   1585  *
   1586  * @see LLVMConstStructInContext()
   1587  */
   1588 LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
   1589                              LLVMBool Packed);
   1590 
   1591 /**
   1592  * Create a ConstantArray from values.
   1593  *
   1594  * @see llvm::ConstantArray::get()
   1595  */
   1596 LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
   1597                             LLVMValueRef *ConstantVals, unsigned Length);
   1598 
   1599 /**
   1600  * Create a non-anonymous ConstantStruct from values.
   1601  *
   1602  * @see llvm::ConstantStruct::get()
   1603  */
   1604 LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
   1605                                   LLVMValueRef *ConstantVals,
   1606                                   unsigned Count);
   1607 
   1608 /**
   1609  * Create a ConstantVector from values.
   1610  *
   1611  * @see llvm::ConstantVector::get()
   1612  */
   1613 LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
   1614 
   1615 /**
   1616  * @}
   1617  */
   1618 
   1619 /**
   1620  * @defgroup LLVMCCoreValueConstantExpressions Constant Expressions
   1621  *
   1622  * Functions in this group correspond to APIs on llvm::ConstantExpr.
   1623  *
   1624  * @see llvm::ConstantExpr.
   1625  *
   1626  * @{
   1627  */
   1628 LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
   1629 LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
   1630 LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
   1631 LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
   1632 LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
   1633 LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
   1634 LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
   1635 LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
   1636 LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1637 LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1638 LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1639 LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1640 LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1641 LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1642 LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1643 LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1644 LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1645 LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1646 LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1647 LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1648 LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1649 LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1650 LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1651 LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1652 LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1653 LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1654 LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1655 LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1656 LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1657 LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1658 LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
   1659                            LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1660 LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
   1661                            LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1662 LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1663 LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1664 LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
   1665 LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
   1666                           LLVMValueRef *ConstantIndices, unsigned NumIndices);
   1667 LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
   1668                                   LLVMValueRef *ConstantIndices,
   1669                                   unsigned NumIndices);
   1670 LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
   1671 LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
   1672 LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
   1673 LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
   1674 LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
   1675 LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
   1676 LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
   1677 LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
   1678 LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
   1679 LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
   1680 LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
   1681 LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
   1682 LLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
   1683 LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
   1684                                     LLVMTypeRef ToType);
   1685 LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
   1686                                     LLVMTypeRef ToType);
   1687 LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
   1688                                      LLVMTypeRef ToType);
   1689 LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
   1690                                   LLVMTypeRef ToType);
   1691 LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
   1692                               LLVMBool isSigned);
   1693 LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
   1694 LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
   1695                              LLVMValueRef ConstantIfTrue,
   1696                              LLVMValueRef ConstantIfFalse);
   1697 LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
   1698                                      LLVMValueRef IndexConstant);
   1699 LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
   1700                                     LLVMValueRef ElementValueConstant,
   1701                                     LLVMValueRef IndexConstant);
   1702 LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
   1703                                     LLVMValueRef VectorBConstant,
   1704                                     LLVMValueRef MaskConstant);
   1705 LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
   1706                                    unsigned NumIdx);
   1707 LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
   1708                                   LLVMValueRef ElementValueConstant,
   1709                                   unsigned *IdxList, unsigned NumIdx);
   1710 LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
   1711                                 const char *AsmString, const char *Constraints,
   1712                                 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
   1713 LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
   1714 
   1715 /**
   1716  * @}
   1717  */
   1718 
   1719 /**
   1720  * @defgroup LLVMCCoreValueConstantGlobals Global Values
   1721  *
   1722  * This group contains functions that operate on global values. Functions in
   1723  * this group relate to functions in the llvm::GlobalValue class tree.
   1724  *
   1725  * @see llvm::GlobalValue
   1726  *
   1727  * @{
   1728  */
   1729 
   1730 LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
   1731 LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
   1732 LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
   1733 void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
   1734 const char *LLVMGetSection(LLVMValueRef Global);
   1735 void LLVMSetSection(LLVMValueRef Global, const char *Section);
   1736 LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
   1737 void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
   1738 LLVMDLLStorageClass LLVMGetDLLStorageClass(LLVMValueRef Global);
   1739 void LLVMSetDLLStorageClass(LLVMValueRef Global, LLVMDLLStorageClass Class);
   1740 LLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global);
   1741 void LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr);
   1742 
   1743 /**
   1744  * @defgroup LLVMCCoreValueWithAlignment Values with alignment
   1745  *
   1746  * Functions in this group only apply to values with alignment, i.e.
   1747  * global variables, load and store instructions.
   1748  */
   1749 
   1750 /**
   1751  * Obtain the preferred alignment of the value.
   1752  * @see llvm::AllocaInst::getAlignment()
   1753  * @see llvm::LoadInst::getAlignment()
   1754  * @see llvm::StoreInst::getAlignment()
   1755  * @see llvm::GlobalValue::getAlignment()
   1756  */
   1757 unsigned LLVMGetAlignment(LLVMValueRef V);
   1758 
   1759 /**
   1760  * Set the preferred alignment of the value.
   1761  * @see llvm::AllocaInst::setAlignment()
   1762  * @see llvm::LoadInst::setAlignment()
   1763  * @see llvm::StoreInst::setAlignment()
   1764  * @see llvm::GlobalValue::setAlignment()
   1765  */
   1766 void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes);
   1767 
   1768 /**
   1769   * @}
   1770   */
   1771 
   1772 /**
   1773  * @defgroup LLVMCoreValueConstantGlobalVariable Global Variables
   1774  *
   1775  * This group contains functions that operate on global variable values.
   1776  *
   1777  * @see llvm::GlobalVariable
   1778  *
   1779  * @{
   1780  */
   1781 LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
   1782 LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
   1783                                          const char *Name,
   1784                                          unsigned AddressSpace);
   1785 LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
   1786 LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
   1787 LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
   1788 LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
   1789 LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
   1790 void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
   1791 LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
   1792 void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
   1793 LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
   1794 void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
   1795 LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
   1796 void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
   1797 LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar);
   1798 void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode);
   1799 LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar);
   1800 void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit);
   1801 
   1802 /**
   1803  * @}
   1804  */
   1805 
   1806 /**
   1807  * @defgroup LLVMCoreValueConstantGlobalAlias Global Aliases
   1808  *
   1809  * This group contains function that operate on global alias values.
   1810  *
   1811  * @see llvm::GlobalAlias
   1812  *
   1813  * @{
   1814  */
   1815 LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
   1816                           const char *Name);
   1817 
   1818 /**
   1819  * @}
   1820  */
   1821 
   1822 /**
   1823  * @defgroup LLVMCCoreValueFunction Function values
   1824  *
   1825  * Functions in this group operate on LLVMValueRef instances that
   1826  * correspond to llvm::Function instances.
   1827  *
   1828  * @see llvm::Function
   1829  *
   1830  * @{
   1831  */
   1832 
   1833 /**
   1834  * Remove a function from its containing module and deletes it.
   1835  *
   1836  * @see llvm::Function::eraseFromParent()
   1837  */
   1838 void LLVMDeleteFunction(LLVMValueRef Fn);
   1839 
   1840 /**
   1841  * Obtain the ID number from a function instance.
   1842  *
   1843  * @see llvm::Function::getIntrinsicID()
   1844  */
   1845 unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
   1846 
   1847 /**
   1848  * Obtain the calling function of a function.
   1849  *
   1850  * The returned value corresponds to the LLVMCallConv enumeration.
   1851  *
   1852  * @see llvm::Function::getCallingConv()
   1853  */
   1854 unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
   1855 
   1856 /**
   1857  * Set the calling convention of a function.
   1858  *
   1859  * @see llvm::Function::setCallingConv()
   1860  *
   1861  * @param Fn Function to operate on
   1862  * @param CC LLVMCallConv to set calling convention to
   1863  */
   1864 void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
   1865 
   1866 /**
   1867  * Obtain the name of the garbage collector to use during code
   1868  * generation.
   1869  *
   1870  * @see llvm::Function::getGC()
   1871  */
   1872 const char *LLVMGetGC(LLVMValueRef Fn);
   1873 
   1874 /**
   1875  * Define the garbage collector to use during code generation.
   1876  *
   1877  * @see llvm::Function::setGC()
   1878  */
   1879 void LLVMSetGC(LLVMValueRef Fn, const char *Name);
   1880 
   1881 /**
   1882  * Add an attribute to a function.
   1883  *
   1884  * @see llvm::Function::addAttribute()
   1885  */
   1886 void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
   1887 
   1888 /**
   1889  * Add a target-dependent attribute to a fuction
   1890  * @see llvm::AttrBuilder::addAttribute()
   1891  */
   1892 void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A,
   1893                                         const char *V);
   1894 
   1895 /**
   1896  * Obtain an attribute from a function.
   1897  *
   1898  * @see llvm::Function::getAttributes()
   1899  */
   1900 LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
   1901 
   1902 /**
   1903  * Remove an attribute from a function.
   1904  */
   1905 void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
   1906 
   1907 /**
   1908  * @defgroup LLVMCCoreValueFunctionParameters Function Parameters
   1909  *
   1910  * Functions in this group relate to arguments/parameters on functions.
   1911  *
   1912  * Functions in this group expect LLVMValueRef instances that correspond
   1913  * to llvm::Function instances.
   1914  *
   1915  * @{
   1916  */
   1917 
   1918 /**
   1919  * Obtain the number of parameters in a function.
   1920  *
   1921  * @see llvm::Function::arg_size()
   1922  */
   1923 unsigned LLVMCountParams(LLVMValueRef Fn);
   1924 
   1925 /**
   1926  * Obtain the parameters in a function.
   1927  *
   1928  * The takes a pointer to a pre-allocated array of LLVMValueRef that is
   1929  * at least LLVMCountParams() long. This array will be filled with
   1930  * LLVMValueRef instances which correspond to the parameters the
   1931  * function receives. Each LLVMValueRef corresponds to a llvm::Argument
   1932  * instance.
   1933  *
   1934  * @see llvm::Function::arg_begin()
   1935  */
   1936 void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
   1937 
   1938 /**
   1939  * Obtain the parameter at the specified index.
   1940  *
   1941  * Parameters are indexed from 0.
   1942  *
   1943  * @see llvm::Function::arg_begin()
   1944  */
   1945 LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
   1946 
   1947 /**
   1948  * Obtain the function to which this argument belongs.
   1949  *
   1950  * Unlike other functions in this group, this one takes an LLVMValueRef
   1951  * that corresponds to a llvm::Attribute.
   1952  *
   1953  * The returned LLVMValueRef is the llvm::Function to which this
   1954  * argument belongs.
   1955  */
   1956 LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
   1957 
   1958 /**
   1959  * Obtain the first parameter to a function.
   1960  *
   1961  * @see llvm::Function::arg_begin()
   1962  */
   1963 LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
   1964 
   1965 /**
   1966  * Obtain the last parameter to a function.
   1967  *
   1968  * @see llvm::Function::arg_end()
   1969  */
   1970 LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
   1971 
   1972 /**
   1973  * Obtain the next parameter to a function.
   1974  *
   1975  * This takes an LLVMValueRef obtained from LLVMGetFirstParam() (which is
   1976  * actually a wrapped iterator) and obtains the next parameter from the
   1977  * underlying iterator.
   1978  */
   1979 LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
   1980 
   1981 /**
   1982  * Obtain the previous parameter to a function.
   1983  *
   1984  * This is the opposite of LLVMGetNextParam().
   1985  */
   1986 LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
   1987 
   1988 /**
   1989  * Add an attribute to a function argument.
   1990  *
   1991  * @see llvm::Argument::addAttr()
   1992  */
   1993 void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
   1994 
   1995 /**
   1996  * Remove an attribute from a function argument.
   1997  *
   1998  * @see llvm::Argument::removeAttr()
   1999  */
   2000 void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
   2001 
   2002 /**
   2003  * Get an attribute from a function argument.
   2004  */
   2005 LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
   2006 
   2007 /**
   2008  * Set the alignment for a function parameter.
   2009  *
   2010  * @see llvm::Argument::addAttr()
   2011  * @see llvm::AttrBuilder::addAlignmentAttr()
   2012  */
   2013 void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
   2014 
   2015 /**
   2016  * @}
   2017  */
   2018 
   2019 /**
   2020  * @}
   2021  */
   2022 
   2023 /**
   2024  * @}
   2025  */
   2026 
   2027 /**
   2028  * @}
   2029  */
   2030 
   2031 /**
   2032  * @defgroup LLVMCCoreValueMetadata Metadata
   2033  *
   2034  * @{
   2035  */
   2036 
   2037 /**
   2038  * Obtain a MDString value from a context.
   2039  *
   2040  * The returned instance corresponds to the llvm::MDString class.
   2041  *
   2042  * The instance is specified by string data of a specified length. The
   2043  * string content is copied, so the backing memory can be freed after
   2044  * this function returns.
   2045  */
   2046 LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
   2047                                    unsigned SLen);
   2048 
   2049 /**
   2050  * Obtain a MDString value from the global context.
   2051  */
   2052 LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
   2053 
   2054 /**
   2055  * Obtain a MDNode value from a context.
   2056  *
   2057  * The returned value corresponds to the llvm::MDNode class.
   2058  */
   2059 LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
   2060                                  unsigned Count);
   2061 
   2062 /**
   2063  * Obtain a MDNode value from the global context.
   2064  */
   2065 LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
   2066 
   2067 /**
   2068  * Obtain the underlying string from a MDString value.
   2069  *
   2070  * @param V Instance to obtain string from.
   2071  * @param Len Memory address which will hold length of returned string.
   2072  * @return String data in MDString.
   2073  */
   2074 const char  *LLVMGetMDString(LLVMValueRef V, unsigned* Len);
   2075 
   2076 /**
   2077  * Obtain the number of operands from an MDNode value.
   2078  *
   2079  * @param V MDNode to get number of operands from.
   2080  * @return Number of operands of the MDNode.
   2081  */
   2082 unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V);
   2083 
   2084 /**
   2085  * Obtain the given MDNode's operands.
   2086  *
   2087  * The passed LLVMValueRef pointer should point to enough memory to hold all of
   2088  * the operands of the given MDNode (see LLVMGetMDNodeNumOperands) as
   2089  * LLVMValueRefs. This memory will be populated with the LLVMValueRefs of the
   2090  * MDNode's operands.
   2091  *
   2092  * @param V MDNode to get the operands from.
   2093  * @param Dest Destination array for operands.
   2094  */
   2095 void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest);
   2096 
   2097 /**
   2098  * @}
   2099  */
   2100 
   2101 /**
   2102  * @defgroup LLVMCCoreValueBasicBlock Basic Block
   2103  *
   2104  * A basic block represents a single entry single exit section of code.
   2105  * Basic blocks contain a list of instructions which form the body of
   2106  * the block.
   2107  *
   2108  * Basic blocks belong to functions. They have the type of label.
   2109  *
   2110  * Basic blocks are themselves values. However, the C API models them as
   2111  * LLVMBasicBlockRef.
   2112  *
   2113  * @see llvm::BasicBlock
   2114  *
   2115  * @{
   2116  */
   2117 
   2118 /**
   2119  * Convert a basic block instance to a value type.
   2120  */
   2121 LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
   2122 
   2123 /**
   2124  * Determine whether an LLVMValueRef is itself a basic block.
   2125  */
   2126 LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
   2127 
   2128 /**
   2129  * Convert an LLVMValueRef to an LLVMBasicBlockRef instance.
   2130  */
   2131 LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
   2132 
   2133 /**
   2134  * Obtain the function to which a basic block belongs.
   2135  *
   2136  * @see llvm::BasicBlock::getParent()
   2137  */
   2138 LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
   2139 
   2140 /**
   2141  * Obtain the terminator instruction for a basic block.
   2142  *
   2143  * If the basic block does not have a terminator (it is not well-formed
   2144  * if it doesn't), then NULL is returned.
   2145  *
   2146  * The returned LLVMValueRef corresponds to a llvm::TerminatorInst.
   2147  *
   2148  * @see llvm::BasicBlock::getTerminator()
   2149  */
   2150 LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
   2151 
   2152 /**
   2153  * Obtain the number of basic blocks in a function.
   2154  *
   2155  * @param Fn Function value to operate on.
   2156  */
   2157 unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
   2158 
   2159 /**
   2160  * Obtain all of the basic blocks in a function.
   2161  *
   2162  * This operates on a function value. The BasicBlocks parameter is a
   2163  * pointer to a pre-allocated array of LLVMBasicBlockRef of at least
   2164  * LLVMCountBasicBlocks() in length. This array is populated with
   2165  * LLVMBasicBlockRef instances.
   2166  */
   2167 void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
   2168 
   2169 /**
   2170  * Obtain the first basic block in a function.
   2171  *
   2172  * The returned basic block can be used as an iterator. You will likely
   2173  * eventually call into LLVMGetNextBasicBlock() with it.
   2174  *
   2175  * @see llvm::Function::begin()
   2176  */
   2177 LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
   2178 
   2179 /**
   2180  * Obtain the last basic block in a function.
   2181  *
   2182  * @see llvm::Function::end()
   2183  */
   2184 LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
   2185 
   2186 /**
   2187  * Advance a basic block iterator.
   2188  */
   2189 LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
   2190 
   2191 /**
   2192  * Go backwards in a basic block iterator.
   2193  */
   2194 LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
   2195 
   2196 /**
   2197  * Obtain the basic block that corresponds to the entry point of a
   2198  * function.
   2199  *
   2200  * @see llvm::Function::getEntryBlock()
   2201  */
   2202 LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
   2203 
   2204 /**
   2205  * Append a basic block to the end of a function.
   2206  *
   2207  * @see llvm::BasicBlock::Create()
   2208  */
   2209 LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
   2210                                                 LLVMValueRef Fn,
   2211                                                 const char *Name);
   2212 
   2213 /**
   2214  * Append a basic block to the end of a function using the global
   2215  * context.
   2216  *
   2217  * @see llvm::BasicBlock::Create()
   2218  */
   2219 LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
   2220 
   2221 /**
   2222  * Insert a basic block in a function before another basic block.
   2223  *
   2224  * The function to add to is determined by the function of the
   2225  * passed basic block.
   2226  *
   2227  * @see llvm::BasicBlock::Create()
   2228  */
   2229 LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
   2230                                                 LLVMBasicBlockRef BB,
   2231                                                 const char *Name);
   2232 
   2233 /**
   2234  * Insert a basic block in a function using the global context.
   2235  *
   2236  * @see llvm::BasicBlock::Create()
   2237  */
   2238 LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
   2239                                        const char *Name);
   2240 
   2241 /**
   2242  * Remove a basic block from a function and delete it.
   2243  *
   2244  * This deletes the basic block from its containing function and deletes
   2245  * the basic block itself.
   2246  *
   2247  * @see llvm::BasicBlock::eraseFromParent()
   2248  */
   2249 void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
   2250 
   2251 /**
   2252  * Remove a basic block from a function.
   2253  *
   2254  * This deletes the basic block from its containing function but keep
   2255  * the basic block alive.
   2256  *
   2257  * @see llvm::BasicBlock::removeFromParent()
   2258  */
   2259 void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
   2260 
   2261 /**
   2262  * Move a basic block to before another one.
   2263  *
   2264  * @see llvm::BasicBlock::moveBefore()
   2265  */
   2266 void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
   2267 
   2268 /**
   2269  * Move a basic block to after another one.
   2270  *
   2271  * @see llvm::BasicBlock::moveAfter()
   2272  */
   2273 void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
   2274 
   2275 /**
   2276  * Obtain the first instruction in a basic block.
   2277  *
   2278  * The returned LLVMValueRef corresponds to a llvm::Instruction
   2279  * instance.
   2280  */
   2281 LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
   2282 
   2283 /**
   2284  * Obtain the last instruction in a basic block.
   2285  *
   2286  * The returned LLVMValueRef corresponds to an LLVM:Instruction.
   2287  */
   2288 LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
   2289 
   2290 /**
   2291  * @}
   2292  */
   2293 
   2294 /**
   2295  * @defgroup LLVMCCoreValueInstruction Instructions
   2296  *
   2297  * Functions in this group relate to the inspection and manipulation of
   2298  * individual instructions.
   2299  *
   2300  * In the C++ API, an instruction is modeled by llvm::Instruction. This
   2301  * class has a large number of descendents. llvm::Instruction is a
   2302  * llvm::Value and in the C API, instructions are modeled by
   2303  * LLVMValueRef.
   2304  *
   2305  * This group also contains sub-groups which operate on specific
   2306  * llvm::Instruction types, e.g. llvm::CallInst.
   2307  *
   2308  * @{
   2309  */
   2310 
   2311 /**
   2312  * Determine whether an instruction has any metadata attached.
   2313  */
   2314 int LLVMHasMetadata(LLVMValueRef Val);
   2315 
   2316 /**
   2317  * Return metadata associated with an instruction value.
   2318  */
   2319 LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
   2320 
   2321 /**
   2322  * Set metadata associated with an instruction value.
   2323  */
   2324 void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
   2325 
   2326 /**
   2327  * Obtain the basic block to which an instruction belongs.
   2328  *
   2329  * @see llvm::Instruction::getParent()
   2330  */
   2331 LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
   2332 
   2333 /**
   2334  * Obtain the instruction that occurs after the one specified.
   2335  *
   2336  * The next instruction will be from the same basic block.
   2337  *
   2338  * If this is the last instruction in a basic block, NULL will be
   2339  * returned.
   2340  */
   2341 LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
   2342 
   2343 /**
   2344  * Obtain the instruction that occurred before this one.
   2345  *
   2346  * If the instruction is the first instruction in a basic block, NULL
   2347  * will be returned.
   2348  */
   2349 LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
   2350 
   2351 /**
   2352  * Remove and delete an instruction.
   2353  *
   2354  * The instruction specified is removed from its containing building
   2355  * block and then deleted.
   2356  *
   2357  * @see llvm::Instruction::eraseFromParent()
   2358  */
   2359 void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
   2360 
   2361 /**
   2362  * Obtain the code opcode for an individual instruction.
   2363  *
   2364  * @see llvm::Instruction::getOpCode()
   2365  */
   2366 LLVMOpcode   LLVMGetInstructionOpcode(LLVMValueRef Inst);
   2367 
   2368 /**
   2369  * Obtain the predicate of an instruction.
   2370  *
   2371  * This is only valid for instructions that correspond to llvm::ICmpInst
   2372  * or llvm::ConstantExpr whose opcode is llvm::Instruction::ICmp.
   2373  *
   2374  * @see llvm::ICmpInst::getPredicate()
   2375  */
   2376 LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
   2377 
   2378 /**
   2379  * @defgroup LLVMCCoreValueInstructionCall Call Sites and Invocations
   2380  *
   2381  * Functions in this group apply to instructions that refer to call
   2382  * sites and invocations. These correspond to C++ types in the
   2383  * llvm::CallInst class tree.
   2384  *
   2385  * @{
   2386  */
   2387 
   2388 /**
   2389  * Set the calling convention for a call instruction.
   2390  *
   2391  * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
   2392  * llvm::InvokeInst.
   2393  *
   2394  * @see llvm::CallInst::setCallingConv()
   2395  * @see llvm::InvokeInst::setCallingConv()
   2396  */
   2397 void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
   2398 
   2399 /**
   2400  * Obtain the calling convention for a call instruction.
   2401  *
   2402  * This is the opposite of LLVMSetInstructionCallConv(). Reads its
   2403  * usage.
   2404  *
   2405  * @see LLVMSetInstructionCallConv()
   2406  */
   2407 unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
   2408 
   2409 
   2410 void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
   2411 void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
   2412                               LLVMAttribute);
   2413 void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
   2414                                 unsigned align);
   2415 
   2416 /**
   2417  * Obtain whether a call instruction is a tail call.
   2418  *
   2419  * This only works on llvm::CallInst instructions.
   2420  *
   2421  * @see llvm::CallInst::isTailCall()
   2422  */
   2423 LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
   2424 
   2425 /**
   2426  * Set whether a call instruction is a tail call.
   2427  *
   2428  * This only works on llvm::CallInst instructions.
   2429  *
   2430  * @see llvm::CallInst::setTailCall()
   2431  */
   2432 void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
   2433 
   2434 /**
   2435  * @}
   2436  */
   2437 
   2438 /**
   2439  * Obtain the default destination basic block of a switch instruction.
   2440  *
   2441  * This only works on llvm::SwitchInst instructions.
   2442  *
   2443  * @see llvm::SwitchInst::getDefaultDest()
   2444  */
   2445 LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
   2446 
   2447 /**
   2448  * @defgroup LLVMCCoreValueInstructionPHINode PHI Nodes
   2449  *
   2450  * Functions in this group only apply to instructions that map to
   2451  * llvm::PHINode instances.
   2452  *
   2453  * @{
   2454  */
   2455 
   2456 /**
   2457  * Add an incoming value to the end of a PHI list.
   2458  */
   2459 void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
   2460                      LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
   2461 
   2462 /**
   2463  * Obtain the number of incoming basic blocks to a PHI node.
   2464  */
   2465 unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
   2466 
   2467 /**
   2468  * Obtain an incoming value to a PHI node as an LLVMValueRef.
   2469  */
   2470 LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
   2471 
   2472 /**
   2473  * Obtain an incoming value to a PHI node as an LLVMBasicBlockRef.
   2474  */
   2475 LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
   2476 
   2477 /**
   2478  * @}
   2479  */
   2480 
   2481 /**
   2482  * @}
   2483  */
   2484 
   2485 /**
   2486  * @}
   2487  */
   2488 
   2489 /**
   2490  * @defgroup LLVMCCoreInstructionBuilder Instruction Builders
   2491  *
   2492  * An instruction builder represents a point within a basic block and is
   2493  * the exclusive means of building instructions using the C interface.
   2494  *
   2495  * @{
   2496  */
   2497 
   2498 LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
   2499 LLVMBuilderRef LLVMCreateBuilder(void);
   2500 void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
   2501                          LLVMValueRef Instr);
   2502 void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
   2503 void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
   2504 LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
   2505 void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
   2506 void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
   2507 void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
   2508                                    const char *Name);
   2509 void LLVMDisposeBuilder(LLVMBuilderRef Builder);
   2510 
   2511 /* Metadata */
   2512 void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
   2513 LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
   2514 void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
   2515 
   2516 /* Terminators */
   2517 LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
   2518 LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
   2519 LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
   2520                                    unsigned N);
   2521 LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
   2522 LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
   2523                              LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
   2524 LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
   2525                              LLVMBasicBlockRef Else, unsigned NumCases);
   2526 LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
   2527                                  unsigned NumDests);
   2528 LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
   2529                              LLVMValueRef *Args, unsigned NumArgs,
   2530                              LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
   2531                              const char *Name);
   2532 LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
   2533                                  LLVMValueRef PersFn, unsigned NumClauses,
   2534                                  const char *Name);
   2535 LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
   2536 LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
   2537 
   2538 /* Add a case to the switch instruction */
   2539 void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
   2540                  LLVMBasicBlockRef Dest);
   2541 
   2542 /* Add a destination to the indirectbr instruction */
   2543 void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
   2544 
   2545 /* Add a catch or filter clause to the landingpad instruction */
   2546 void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
   2547 
   2548 /* Set the 'cleanup' flag in the landingpad instruction */
   2549 void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
   2550 
   2551 /* Arithmetic */
   2552 LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2553                           const char *Name);
   2554 LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2555                              const char *Name);
   2556 LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2557                              const char *Name);
   2558 LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2559                            const char *Name);
   2560 LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2561                           const char *Name);
   2562 LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2563                              const char *Name);
   2564 LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2565                              const char *Name);
   2566 LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2567                            const char *Name);
   2568 LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2569                           const char *Name);
   2570 LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2571                              const char *Name);
   2572 LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2573                              const char *Name);
   2574 LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2575                            const char *Name);
   2576 LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2577                            const char *Name);
   2578 LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2579                            const char *Name);
   2580 LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2581                                 const char *Name);
   2582 LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2583                            const char *Name);
   2584 LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2585                            const char *Name);
   2586 LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2587                            const char *Name);
   2588 LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2589                            const char *Name);
   2590 LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2591                            const char *Name);
   2592 LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2593                            const char *Name);
   2594 LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2595                            const char *Name);
   2596 LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2597                           const char *Name);
   2598 LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2599                           const char *Name);
   2600 LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
   2601                           const char *Name);
   2602 LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
   2603                             LLVMValueRef LHS, LLVMValueRef RHS,
   2604                             const char *Name);
   2605 LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
   2606 LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
   2607                              const char *Name);
   2608 LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
   2609                              const char *Name);
   2610 LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
   2611 LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
   2612 
   2613 /* Memory */
   2614 LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
   2615 LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
   2616                                   LLVMValueRef Val, const char *Name);
   2617 LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
   2618 LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
   2619                                   LLVMValueRef Val, const char *Name);
   2620 LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
   2621 LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
   2622                            const char *Name);
   2623 LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
   2624 LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
   2625                           LLVMValueRef *Indices, unsigned NumIndices,
   2626                           const char *Name);
   2627 LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
   2628                                   LLVMValueRef *Indices, unsigned NumIndices,
   2629                                   const char *Name);
   2630 LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
   2631                                 unsigned Idx, const char *Name);
   2632 LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
   2633                                    const char *Name);
   2634 LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
   2635                                       const char *Name);
   2636 LLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst);
   2637 void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile);
   2638 
   2639 /* Casts */
   2640 LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
   2641                             LLVMTypeRef DestTy, const char *Name);
   2642 LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
   2643                            LLVMTypeRef DestTy, const char *Name);
   2644 LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
   2645                            LLVMTypeRef DestTy, const char *Name);
   2646 LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
   2647                              LLVMTypeRef DestTy, const char *Name);
   2648 LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
   2649                              LLVMTypeRef DestTy, const char *Name);
   2650 LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
   2651                              LLVMTypeRef DestTy, const char *Name);
   2652 LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
   2653                              LLVMTypeRef DestTy, const char *Name);
   2654 LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
   2655                               LLVMTypeRef DestTy, const char *Name);
   2656 LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
   2657                             LLVMTypeRef DestTy, const char *Name);
   2658 LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
   2659                                LLVMTypeRef DestTy, const char *Name);
   2660 LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
   2661                                LLVMTypeRef DestTy, const char *Name);
   2662 LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
   2663                               LLVMTypeRef DestTy, const char *Name);
   2664 LLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef, LLVMValueRef Val,
   2665                                     LLVMTypeRef DestTy, const char *Name);
   2666 LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
   2667                                     LLVMTypeRef DestTy, const char *Name);
   2668 LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
   2669                                     LLVMTypeRef DestTy, const char *Name);
   2670 LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
   2671                                      LLVMTypeRef DestTy, const char *Name);
   2672 LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
   2673                            LLVMTypeRef DestTy, const char *Name);
   2674 LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
   2675                                   LLVMTypeRef DestTy, const char *Name);
   2676 LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
   2677                               LLVMTypeRef DestTy, const char *Name);
   2678 LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
   2679                              LLVMTypeRef DestTy, const char *Name);
   2680 
   2681 /* Comparisons */
   2682 LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
   2683                            LLVMValueRef LHS, LLVMValueRef RHS,
   2684                            const char *Name);
   2685 LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
   2686                            LLVMValueRef LHS, LLVMValueRef RHS,
   2687                            const char *Name);
   2688 
   2689 /* Miscellaneous instructions */
   2690 LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
   2691 LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
   2692                            LLVMValueRef *Args, unsigned NumArgs,
   2693                            const char *Name);
   2694 LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
   2695                              LLVMValueRef Then, LLVMValueRef Else,
   2696                              const char *Name);
   2697 LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
   2698                             const char *Name);
   2699 LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
   2700                                      LLVMValueRef Index, const char *Name);
   2701 LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
   2702                                     LLVMValueRef EltVal, LLVMValueRef Index,
   2703                                     const char *Name);
   2704 LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
   2705                                     LLVMValueRef V2, LLVMValueRef Mask,
   2706                                     const char *Name);
   2707 LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
   2708                                    unsigned Index, const char *Name);
   2709 LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
   2710                                   LLVMValueRef EltVal, unsigned Index,
   2711                                   const char *Name);
   2712 
   2713 LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
   2714                              const char *Name);
   2715 LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
   2716                                 const char *Name);
   2717 LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
   2718                               LLVMValueRef RHS, const char *Name);
   2719 LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering ordering,
   2720                             LLVMBool singleThread, const char *Name);
   2721 LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, LLVMAtomicRMWBinOp op,
   2722                                 LLVMValueRef PTR, LLVMValueRef Val,
   2723                                 LLVMAtomicOrdering ordering,
   2724                                 LLVMBool singleThread);
   2725 
   2726 /**
   2727  * @}
   2728  */
   2729 
   2730 /**
   2731  * @defgroup LLVMCCoreModuleProvider Module Providers
   2732  *
   2733  * @{
   2734  */
   2735 
   2736 /**
   2737  * Changes the type of M so it can be passed to FunctionPassManagers and the
   2738  * JIT.  They take ModuleProviders for historical reasons.
   2739  */
   2740 LLVMModuleProviderRef
   2741 LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
   2742 
   2743 /**
   2744  * Destroys the module M.
   2745  */
   2746 void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
   2747 
   2748 /**
   2749  * @}
   2750  */
   2751 
   2752 /**
   2753  * @defgroup LLVMCCoreMemoryBuffers Memory Buffers
   2754  *
   2755  * @{
   2756  */
   2757 
   2758 LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
   2759                                                   LLVMMemoryBufferRef *OutMemBuf,
   2760                                                   char **OutMessage);
   2761 LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
   2762                                          char **OutMessage);
   2763 LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(const char *InputData,
   2764                                                           size_t InputDataLength,
   2765                                                           const char *BufferName,
   2766                                                           LLVMBool RequiresNullTerminator);
   2767 LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(const char *InputData,
   2768                                                               size_t InputDataLength,
   2769                                                               const char *BufferName);
   2770 const char *LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf);
   2771 size_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf);
   2772 void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
   2773 
   2774 /**
   2775  * @}
   2776  */
   2777 
   2778 /**
   2779  * @defgroup LLVMCCorePassRegistry Pass Registry
   2780  *
   2781  * @{
   2782  */
   2783 
   2784 /** Return the global pass registry, for use with initialization functions.
   2785     @see llvm::PassRegistry::getPassRegistry */
   2786 LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
   2787 
   2788 /**
   2789  * @}
   2790  */
   2791 
   2792 /**
   2793  * @defgroup LLVMCCorePassManagers Pass Managers
   2794  *
   2795  * @{
   2796  */
   2797 
   2798 /** Constructs a new whole-module pass pipeline. This type of pipeline is
   2799     suitable for link-time optimization and whole-module transformations.
   2800     @see llvm::PassManager::PassManager */
   2801 LLVMPassManagerRef LLVMCreatePassManager(void);
   2802 
   2803 /** Constructs a new function-by-function pass pipeline over the module
   2804     provider. It does not take ownership of the module provider. This type of
   2805     pipeline is suitable for code generation and JIT compilation tasks.
   2806     @see llvm::FunctionPassManager::FunctionPassManager */
   2807 LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
   2808 
   2809 /** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
   2810 LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
   2811 
   2812 /** Initializes, executes on the provided module, and finalizes all of the
   2813     passes scheduled in the pass manager. Returns 1 if any of the passes
   2814     modified the module, 0 otherwise.
   2815     @see llvm::PassManager::run(Module&) */
   2816 LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
   2817 
   2818 /** Initializes all of the function passes scheduled in the function pass
   2819     manager. Returns 1 if any of the passes modified the module, 0 otherwise.
   2820     @see llvm::FunctionPassManager::doInitialization */
   2821 LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
   2822 
   2823 /** Executes all of the function passes scheduled in the function pass manager
   2824     on the provided function. Returns 1 if any of the passes modified the
   2825     function, false otherwise.
   2826     @see llvm::FunctionPassManager::run(Function&) */
   2827 LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
   2828 
   2829 /** Finalizes all of the function passes scheduled in in the function pass
   2830     manager. Returns 1 if any of the passes modified the module, 0 otherwise.
   2831     @see llvm::FunctionPassManager::doFinalization */
   2832 LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
   2833 
   2834 /** Frees the memory of a pass pipeline. For function pipelines, does not free
   2835     the module provider.
   2836     @see llvm::PassManagerBase::~PassManagerBase. */
   2837 void LLVMDisposePassManager(LLVMPassManagerRef PM);
   2838 
   2839 /**
   2840  * @}
   2841  */
   2842 
   2843 /**
   2844  * @defgroup LLVMCCoreThreading Threading
   2845  *
   2846  * Handle the structures needed to make LLVM safe for multithreading.
   2847  *
   2848  * @{
   2849  */
   2850 
   2851 /** Deprecated: Multi-threading can only be enabled/disabled with the compile
   2852     time define LLVM_ENABLE_THREADS.  This function always returns
   2853     LLVMIsMultithreaded(). */
   2854 LLVMBool LLVMStartMultithreaded(void);
   2855 
   2856 /** Deprecated: Multi-threading can only be enabled/disabled with the compile
   2857     time define LLVM_ENABLE_THREADS. */
   2858 void LLVMStopMultithreaded(void);
   2859 
   2860 /** Check whether LLVM is executing in thread-safe mode or not.
   2861     @see llvm::llvm_is_multithreaded */
   2862 LLVMBool LLVMIsMultithreaded(void);
   2863 
   2864 /**
   2865  * @}
   2866  */
   2867 
   2868 /**
   2869  * @}
   2870  */
   2871 
   2872 /**
   2873  * @}
   2874  */
   2875 
   2876 #ifdef __cplusplus
   2877 }
   2878 #endif /* !defined(__cplusplus) */
   2879 
   2880 #endif /* !defined(LLVM_C_CORE_H) */
   2881