• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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