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