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