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