1
/*===-- llvm-c/Core.h - Core Library C Interface ------------------*- C -*-===*\
3
|* The LLVM Compiler Infrastructure *|
5
|* This file is distributed under the University of Illinois Open Source *|
6
|* License. See LICENSE.TXT for details. *|
8
|*===----------------------------------------------------------------------===*|
10
|* This header declares the C interface to libLLVMCore.a, which implements *|
11
|* the LLVM intermediate representation. *|
13
|* LLVM uses a polymorphic type hierarchy which C cannot represent, therefore *|
14
|* parameters must be passed as base types. Despite the declared types, most *|
15
|* of the functions provided operate only on branches of the type hierarchy. *|
16
|* The declared parameter names are descriptive and specify which type is *|
17
|* required. Additionally, each type hierarchy is documented along with the *|
18
|* functions that operate upon it. For more detail, refer to LLVM's C++ code. *|
19
|* If in doubt, refer to Core.cpp, which performs paramter downcasts in the *|
20
|* form unwrap<RequiredType>(Param). *|
22
|* Many exotic languages can interoperate with C code but have a harder time *|
23
|* with C++ due to name mangling. So in addition to C, this interface enables *|
24
|* tools written in such languages. *|
26
|* When included into a C++ source file, also declares 'wrap' and 'unwrap' *|
27
|* helpers to perform opaque reference<-->pointer conversions. These helpers *|
28
|* are shorter and more tightly typed than writing the casts by hand when *|
29
|* authoring bindings. In assert builds, they will do runtime type checking. *|
31
\*===----------------------------------------------------------------------===*/
36
#include "llvm/System/DataTypes.h"
40
/* Need these includes to support the LLVM 'cast' template for the C++ 'wrap'
41
and 'unwrap' conversion functions. */
42
#include "llvm/Module.h"
43
#include "llvm/Support/IRBuilder.h"
54
* The top-level container for all LLVM global data. See the LLVMContext class.
56
typedef struct LLVMOpaqueContext *LLVMContextRef;
59
* The top-level container for all other LLVM Intermediate Representation (IR)
60
* objects. See the llvm::Module class.
62
typedef struct LLVMOpaqueModule *LLVMModuleRef;
65
* Each value in the LLVM IR has a type, an LLVMTypeRef. See the llvm::Type
68
typedef struct LLVMOpaqueType *LLVMTypeRef;
71
* When building recursive types using LLVMRefineType, LLVMTypeRef values may
72
* become invalid; use LLVMTypeHandleRef to resolve this problem. See the
73
* llvm::AbstractTypeHolder class.
75
typedef struct LLVMOpaqueTypeHandle *LLVMTypeHandleRef;
77
typedef struct LLVMOpaqueValue *LLVMValueRef;
78
typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
79
typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
81
/* Interface used to provide a module to JIT or interpreter. This is now just a
82
* synonym for llvm::Module, but we have to keep using the different type to
83
* keep binary compatibility.
85
typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
87
/* Used to provide a module to JIT or interpreter.
88
* See the llvm::MemoryBuffer class.
90
typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
92
/** See the llvm::PassManagerBase class. */
93
typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
95
/** Used to get the users and usees of a Value. See the llvm::Use class. */
96
typedef struct LLVMOpaqueUse *LLVMUseRef;
99
LLVMZExtAttribute = 1<<0,
100
LLVMSExtAttribute = 1<<1,
101
LLVMNoReturnAttribute = 1<<2,
102
LLVMInRegAttribute = 1<<3,
103
LLVMStructRetAttribute = 1<<4,
104
LLVMNoUnwindAttribute = 1<<5,
105
LLVMNoAliasAttribute = 1<<6,
106
LLVMByValAttribute = 1<<7,
107
LLVMNestAttribute = 1<<8,
108
LLVMReadNoneAttribute = 1<<9,
109
LLVMReadOnlyAttribute = 1<<10,
110
LLVMNoInlineAttribute = 1<<11,
111
LLVMAlwaysInlineAttribute = 1<<12,
112
LLVMOptimizeForSizeAttribute = 1<<13,
113
LLVMStackProtectAttribute = 1<<14,
114
LLVMStackProtectReqAttribute = 1<<15,
115
LLVMAlignment = 31<<16,
116
LLVMNoCaptureAttribute = 1<<21,
117
LLVMNoRedZoneAttribute = 1<<22,
118
LLVMNoImplicitFloatAttribute = 1<<23,
119
LLVMNakedAttribute = 1<<24,
120
LLVMInlineHintAttribute = 1<<25,
121
LLVMStackAlignment = 7<<26
125
/* Terminator Instructions */
134
/* Standard Binary Operators */
148
/* Logical Operators */
156
/* Memory Operators */
160
LLVMGetElementPtr = 29,
176
/* Other Operators */
185
LLVMExtractElement = 50,
186
LLVMInsertElement = 51,
187
LLVMShuffleVector = 52,
188
LLVMExtractValue = 53,
193
LLVMVoidTypeKind, /**< type with no size */
194
LLVMFloatTypeKind, /**< 32 bit floating point type */
195
LLVMDoubleTypeKind, /**< 64 bit floating point type */
196
LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
197
LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
198
LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
199
LLVMLabelTypeKind, /**< Labels */
200
LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
201
LLVMFunctionTypeKind, /**< Functions */
202
LLVMStructTypeKind, /**< Structures */
203
LLVMArrayTypeKind, /**< Arrays */
204
LLVMPointerTypeKind, /**< Pointers */
205
LLVMOpaqueTypeKind, /**< Opaque: type with unknown structure */
206
LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
207
LLVMMetadataTypeKind /**< Metadata */
211
LLVMExternalLinkage, /**< Externally visible function */
212
LLVMAvailableExternallyLinkage,
213
LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
214
LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
216
LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
217
LLVMWeakODRLinkage, /**< Same, but only replaced by something
219
LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
220
LLVMInternalLinkage, /**< Rename collisions when linking (static
222
LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
223
LLVMDLLImportLinkage, /**< Function to be imported from DLL */
224
LLVMDLLExportLinkage, /**< Function to be accessible from DLL */
225
LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
226
LLVMGhostLinkage, /**< Obsolete */
227
LLVMCommonLinkage, /**< Tentative definitions */
228
LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
229
LLVMLinkerPrivateWeakLinkage, /**< Like LinkerPrivate, but is weak. */
230
LLVMLinkerPrivateWeakDefAutoLinkage /**< Like LinkerPrivateWeak, but possibly
235
LLVMDefaultVisibility, /**< The GV is visible */
236
LLVMHiddenVisibility, /**< The GV is hidden */
237
LLVMProtectedVisibility /**< The GV is protected */
242
LLVMFastCallConv = 8,
243
LLVMColdCallConv = 9,
244
LLVMX86StdcallCallConv = 64,
245
LLVMX86FastcallCallConv = 65
249
LLVMIntEQ = 32, /**< equal */
250
LLVMIntNE, /**< not equal */
251
LLVMIntUGT, /**< unsigned greater than */
252
LLVMIntUGE, /**< unsigned greater or equal */
253
LLVMIntULT, /**< unsigned less than */
254
LLVMIntULE, /**< unsigned less or equal */
255
LLVMIntSGT, /**< signed greater than */
256
LLVMIntSGE, /**< signed greater or equal */
257
LLVMIntSLT, /**< signed less than */
258
LLVMIntSLE /**< signed less or equal */
262
LLVMRealPredicateFalse, /**< Always false (always folded) */
263
LLVMRealOEQ, /**< True if ordered and equal */
264
LLVMRealOGT, /**< True if ordered and greater than */
265
LLVMRealOGE, /**< True if ordered and greater than or equal */
266
LLVMRealOLT, /**< True if ordered and less than */
267
LLVMRealOLE, /**< True if ordered and less than or equal */
268
LLVMRealONE, /**< True if ordered and operands are unequal */
269
LLVMRealORD, /**< True if ordered (no nans) */
270
LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
271
LLVMRealUEQ, /**< True if unordered or equal */
272
LLVMRealUGT, /**< True if unordered or greater than */
273
LLVMRealUGE, /**< True if unordered, greater than, or equal */
274
LLVMRealULT, /**< True if unordered or less than */
275
LLVMRealULE, /**< True if unordered, less than, or equal */
276
LLVMRealUNE, /**< True if unordered or not equal */
277
LLVMRealPredicateTrue /**< Always true (always folded) */
281
/*===-- Error handling ----------------------------------------------------===*/
283
void LLVMDisposeMessage(char *Message);
286
/*===-- Contexts ----------------------------------------------------------===*/
288
/* Create and destroy contexts. */
289
LLVMContextRef LLVMContextCreate(void);
290
LLVMContextRef LLVMGetGlobalContext(void);
291
void LLVMContextDispose(LLVMContextRef C);
293
unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
295
unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
297
/*===-- Modules -----------------------------------------------------------===*/
299
/* Create and destroy modules. */
300
/** See llvm::Module::Module. */
301
LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
302
LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
305
/** See llvm::Module::~Module. */
306
void LLVMDisposeModule(LLVMModuleRef M);
308
/** Data layout. See Module::getDataLayout. */
309
const char *LLVMGetDataLayout(LLVMModuleRef M);
310
void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
312
/** Target triple. See Module::getTargetTriple. */
313
const char *LLVMGetTarget(LLVMModuleRef M);
314
void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
316
/** See Module::addTypeName. */
317
LLVMBool LLVMAddTypeName(LLVMModuleRef M, const char *Name, LLVMTypeRef Ty);
318
void LLVMDeleteTypeName(LLVMModuleRef M, const char *Name);
319
LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
321
/** See Module::dump. */
322
void LLVMDumpModule(LLVMModuleRef M);
324
/** See Module::setModuleInlineAsm. */
325
void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
327
/*===-- Types -------------------------------------------------------------===*/
329
/* LLVM types conform to the following hierarchy:
344
/** See llvm::LLVMTypeKind::getTypeID. */
345
LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
347
/** See llvm::LLVMType::getContext. */
348
LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
350
/* Operations on integer types */
351
LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
352
LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
353
LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
354
LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
355
LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
356
LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
358
LLVMTypeRef LLVMInt1Type(void);
359
LLVMTypeRef LLVMInt8Type(void);
360
LLVMTypeRef LLVMInt16Type(void);
361
LLVMTypeRef LLVMInt32Type(void);
362
LLVMTypeRef LLVMInt64Type(void);
363
LLVMTypeRef LLVMIntType(unsigned NumBits);
364
unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
366
/* Operations on real types */
367
LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
368
LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
369
LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
370
LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
371
LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
373
LLVMTypeRef LLVMFloatType(void);
374
LLVMTypeRef LLVMDoubleType(void);
375
LLVMTypeRef LLVMX86FP80Type(void);
376
LLVMTypeRef LLVMFP128Type(void);
377
LLVMTypeRef LLVMPPCFP128Type(void);
379
/* Operations on function types */
380
LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
381
LLVMTypeRef *ParamTypes, unsigned ParamCount,
383
LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
384
LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
385
unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
386
void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
388
/* Operations on struct types */
389
LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
390
unsigned ElementCount, LLVMBool Packed);
391
LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
393
unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
394
void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
395
LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
397
/* Operations on array, pointer, and vector types (sequence types) */
398
LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
399
LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
400
LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
402
LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
403
unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
404
unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
405
unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
407
/* Operations on other types */
408
LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
409
LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
410
LLVMTypeRef LLVMOpaqueTypeInContext(LLVMContextRef C);
412
LLVMTypeRef LLVMVoidType(void);
413
LLVMTypeRef LLVMLabelType(void);
414
LLVMTypeRef LLVMOpaqueType(void);
416
/* Operations on type handles */
417
LLVMTypeHandleRef LLVMCreateTypeHandle(LLVMTypeRef PotentiallyAbstractTy);
418
void LLVMRefineType(LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy);
419
LLVMTypeRef LLVMResolveTypeHandle(LLVMTypeHandleRef TypeHandle);
420
void LLVMDisposeTypeHandle(LLVMTypeHandleRef TypeHandle);
423
/*===-- Values ------------------------------------------------------------===*/
425
/* The bulk of LLVM's object model consists of values, which comprise a very
426
* rich type hierarchy.
429
#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
435
macro(ConstantAggregateZero) \
436
macro(ConstantArray) \
437
macro(ConstantExpr) \
440
macro(ConstantPointerNull) \
441
macro(ConstantStruct) \
442
macro(ConstantVector) \
446
macro(GlobalVariable) \
449
macro(BinaryOperator) \
451
macro(IntrinsicInst) \
452
macro(DbgInfoIntrinsic) \
453
macro(DbgDeclareInst) \
454
macro(EHSelectorInst) \
455
macro(MemIntrinsic) \
462
macro(ExtractElementInst) \
463
macro(GetElementPtrInst) \
464
macro(InsertElementInst) \
465
macro(InsertValueInst) \
468
macro(ShuffleVectorInst) \
470
macro(TerminatorInst) \
475
macro(UnreachableInst) \
477
macro(UnaryInstruction) \
485
macro(IntToPtrInst) \
486
macro(PtrToIntInst) \
492
macro(ExtractValueInst) \
496
/* Operations on all values */
497
LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
498
const char *LLVMGetValueName(LLVMValueRef Val);
499
void LLVMSetValueName(LLVMValueRef Val, const char *Name);
500
void LLVMDumpValue(LLVMValueRef Val);
501
void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
502
int LLVMHasMetadata(LLVMValueRef Val);
503
LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
504
void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
506
/* Conversion functions. Return the input value if it is an instance of the
507
specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */
508
#define LLVM_DECLARE_VALUE_CAST(name) \
509
LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
510
LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
512
/* Operations on Uses */
513
LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
514
LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
515
LLVMValueRef LLVMGetUser(LLVMUseRef U);
516
LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
518
/* Operations on Users */
519
LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
520
void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
521
int LLVMGetNumOperands(LLVMValueRef Val);
523
/* Operations on constants of any type */
524
LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
525
LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
526
LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
527
LLVMBool LLVMIsConstant(LLVMValueRef Val);
528
LLVMBool LLVMIsNull(LLVMValueRef Val);
529
LLVMBool LLVMIsUndef(LLVMValueRef Val);
530
LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
532
/* Operations on metadata */
533
LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
535
LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
536
LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
538
LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
540
/* Operations on scalar constants */
541
LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
542
LLVMBool SignExtend);
543
LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
545
LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
546
unsigned SLen, uint8_t Radix);
547
LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
548
LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
549
LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
551
unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
552
long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
555
/* Operations on composite constants */
556
LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
557
unsigned Length, LLVMBool DontNullTerminate);
558
LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
559
LLVMValueRef *ConstantVals,
560
unsigned Count, LLVMBool Packed);
562
LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
563
LLVMBool DontNullTerminate);
564
LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
565
LLVMValueRef *ConstantVals, unsigned Length);
566
LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
568
LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
570
/* Constant expressions */
571
LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
572
LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
573
LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
574
LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
575
LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
576
LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
577
LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
578
LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
579
LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
580
LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
581
LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
582
LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
583
LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
584
LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
585
LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
586
LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
587
LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
588
LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
589
LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
590
LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
591
LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
592
LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
593
LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
594
LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
595
LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
596
LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
597
LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
598
LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
599
LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
600
LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
601
LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
602
LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
603
LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
604
LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
605
LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
606
LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
607
LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
608
LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
609
LLVMValueRef *ConstantIndices, unsigned NumIndices);
610
LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
611
LLVMValueRef *ConstantIndices,
612
unsigned NumIndices);
613
LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
614
LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
615
LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
616
LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
617
LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
618
LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
619
LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
620
LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
621
LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
622
LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
623
LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
624
LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
625
LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
627
LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
629
LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
631
LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
633
LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
635
LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
636
LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
637
LLVMValueRef ConstantIfTrue,
638
LLVMValueRef ConstantIfFalse);
639
LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
640
LLVMValueRef IndexConstant);
641
LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
642
LLVMValueRef ElementValueConstant,
643
LLVMValueRef IndexConstant);
644
LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
645
LLVMValueRef VectorBConstant,
646
LLVMValueRef MaskConstant);
647
LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
649
LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
650
LLVMValueRef ElementValueConstant,
651
unsigned *IdxList, unsigned NumIdx);
652
LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
653
const char *AsmString, const char *Constraints,
654
LLVMBool HasSideEffects, LLVMBool IsAlignStack);
655
LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
657
/* Operations on global variables, functions, and aliases (globals) */
658
LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
659
LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
660
LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
661
void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
662
const char *LLVMGetSection(LLVMValueRef Global);
663
void LLVMSetSection(LLVMValueRef Global, const char *Section);
664
LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
665
void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
666
unsigned LLVMGetAlignment(LLVMValueRef Global);
667
void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
669
/* Operations on global variables */
670
LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
671
LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
673
unsigned AddressSpace);
674
LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
675
LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
676
LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
677
LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
678
LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
679
void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
680
LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
681
void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
682
LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
683
void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
684
LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
685
void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
687
/* Operations on aliases */
688
LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
691
/* Operations on functions */
692
LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
693
LLVMTypeRef FunctionTy);
694
LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
695
LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
696
LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
697
LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
698
LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
699
void LLVMDeleteFunction(LLVMValueRef Fn);
700
unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
701
unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
702
void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
703
const char *LLVMGetGC(LLVMValueRef Fn);
704
void LLVMSetGC(LLVMValueRef Fn, const char *Name);
705
void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
706
LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
707
void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
709
/* Operations on parameters */
710
unsigned LLVMCountParams(LLVMValueRef Fn);
711
void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
712
LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
713
LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
714
LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
715
LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
716
LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
717
LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
718
void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
719
void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
720
LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
721
void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
723
/* Operations on basic blocks */
724
LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
725
LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
726
LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
727
LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
728
unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
729
void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
730
LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
731
LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
732
LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
733
LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
734
LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
736
LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
739
LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
740
LLVMBasicBlockRef BB,
743
LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
744
LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
746
void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
748
void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
749
void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
751
/* Operations on instructions */
752
LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
753
LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
754
LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
755
LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
756
LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
758
/* Operations on call sites */
759
void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
760
unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
761
void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
762
void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
764
void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
767
/* Operations on call instructions (only) */
768
LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
769
void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
771
/* Operations on phi nodes */
772
void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
773
LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
774
unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
775
LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
776
LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
778
/*===-- Instruction builders ----------------------------------------------===*/
780
/* An instruction builder represents a point within a basic block, and is the
781
* exclusive means of building instructions using the C interface.
784
LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
785
LLVMBuilderRef LLVMCreateBuilder(void);
786
void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
788
void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
789
void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
790
LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
791
void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
792
void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
793
void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
795
void LLVMDisposeBuilder(LLVMBuilderRef Builder);
798
void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
799
LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
800
void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
803
LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
804
LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
805
LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
807
LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
808
LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
809
LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
810
LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
811
LLVMBasicBlockRef Else, unsigned NumCases);
812
LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
814
LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
815
LLVMValueRef *Args, unsigned NumArgs,
816
LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
818
LLVMValueRef LLVMBuildUnwind(LLVMBuilderRef);
819
LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
821
/* Add a case to the switch instruction */
822
void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
823
LLVMBasicBlockRef Dest);
825
/* Add a destination to the indirectbr instruction */
826
void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
829
LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
831
LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
833
LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
835
LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
837
LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
839
LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
841
LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
843
LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
845
LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
847
LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
849
LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
851
LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
853
LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
855
LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
857
LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
859
LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
861
LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
863
LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
865
LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
867
LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
869
LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
871
LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
873
LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
875
LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
877
LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
879
LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
880
LLVMValueRef LHS, LLVMValueRef RHS,
882
LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
883
LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
885
LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
887
LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
888
LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
891
LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
892
LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
893
LLVMValueRef Val, const char *Name);
894
LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
895
LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
896
LLVMValueRef Val, const char *Name);
897
LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
898
LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
900
LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
901
LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
902
LLVMValueRef *Indices, unsigned NumIndices,
904
LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
905
LLVMValueRef *Indices, unsigned NumIndices,
907
LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
908
unsigned Idx, const char *Name);
909
LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
911
LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
915
LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
916
LLVMTypeRef DestTy, const char *Name);
917
LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
918
LLVMTypeRef DestTy, const char *Name);
919
LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
920
LLVMTypeRef DestTy, const char *Name);
921
LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
922
LLVMTypeRef DestTy, const char *Name);
923
LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
924
LLVMTypeRef DestTy, const char *Name);
925
LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
926
LLVMTypeRef DestTy, const char *Name);
927
LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
928
LLVMTypeRef DestTy, const char *Name);
929
LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
930
LLVMTypeRef DestTy, const char *Name);
931
LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
932
LLVMTypeRef DestTy, const char *Name);
933
LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
934
LLVMTypeRef DestTy, const char *Name);
935
LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
936
LLVMTypeRef DestTy, const char *Name);
937
LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
938
LLVMTypeRef DestTy, const char *Name);
939
LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
940
LLVMTypeRef DestTy, const char *Name);
941
LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
942
LLVMTypeRef DestTy, const char *Name);
943
LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
944
LLVMTypeRef DestTy, const char *Name);
945
LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
946
LLVMTypeRef DestTy, const char *Name);
947
LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
948
LLVMTypeRef DestTy, const char *Name);
949
LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
950
LLVMTypeRef DestTy, const char *Name);
951
LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
952
LLVMTypeRef DestTy, const char *Name);
955
LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
956
LLVMValueRef LHS, LLVMValueRef RHS,
958
LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
959
LLVMValueRef LHS, LLVMValueRef RHS,
962
/* Miscellaneous instructions */
963
LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
964
LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
965
LLVMValueRef *Args, unsigned NumArgs,
967
LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
968
LLVMValueRef Then, LLVMValueRef Else,
970
LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
972
LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
973
LLVMValueRef Index, const char *Name);
974
LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
975
LLVMValueRef EltVal, LLVMValueRef Index,
977
LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
978
LLVMValueRef V2, LLVMValueRef Mask,
980
LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
981
unsigned Index, const char *Name);
982
LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
983
LLVMValueRef EltVal, unsigned Index,
986
LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
988
LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
990
LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
991
LLVMValueRef RHS, const char *Name);
994
/*===-- Module providers --------------------------------------------------===*/
996
/* Changes the type of M so it can be passed to FunctionPassManagers and the
997
* JIT. They take ModuleProviders for historical reasons.
999
LLVMModuleProviderRef
1000
LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
1002
/* Destroys the module M.
1004
void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
1007
/*===-- Memory buffers ----------------------------------------------------===*/
1009
LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
1010
LLVMMemoryBufferRef *OutMemBuf,
1012
LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
1014
void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
1017
/*===-- Pass Managers -----------------------------------------------------===*/
1019
/** Constructs a new whole-module pass pipeline. This type of pipeline is
1020
suitable for link-time optimization and whole-module transformations.
1021
See llvm::PassManager::PassManager. */
1022
LLVMPassManagerRef LLVMCreatePassManager(void);
1024
/** Constructs a new function-by-function pass pipeline over the module
1025
provider. It does not take ownership of the module provider. This type of
1026
pipeline is suitable for code generation and JIT compilation tasks.
1027
See llvm::FunctionPassManager::FunctionPassManager. */
1028
LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
1030
/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
1031
LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
1033
/** Initializes, executes on the provided module, and finalizes all of the
1034
passes scheduled in the pass manager. Returns 1 if any of the passes
1035
modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
1036
LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
1038
/** Initializes all of the function passes scheduled in the function pass
1039
manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1040
See llvm::FunctionPassManager::doInitialization. */
1041
LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
1043
/** Executes all of the function passes scheduled in the function pass manager
1044
on the provided function. Returns 1 if any of the passes modified the
1045
function, false otherwise.
1046
See llvm::FunctionPassManager::run(Function&). */
1047
LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
1049
/** Finalizes all of the function passes scheduled in in the function pass
1050
manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1051
See llvm::FunctionPassManager::doFinalization. */
1052
LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
1054
/** Frees the memory of a pass pipeline. For function pipelines, does not free
1055
the module provider.
1056
See llvm::PassManagerBase::~PassManagerBase. */
1057
void LLVMDisposePassManager(LLVMPassManagerRef PM);
1065
class PassManagerBase;
1067
#define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1068
inline ty *unwrap(ref P) { \
1069
return reinterpret_cast<ty*>(P); \
1072
inline ref wrap(const ty *P) { \
1073
return reinterpret_cast<ref>(const_cast<ty*>(P)); \
1076
#define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \
1077
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1079
template<typename T> \
1080
inline T *unwrap(ref P) { \
1081
return cast<T>(unwrap(P)); \
1084
#define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \
1085
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1087
template<typename T> \
1088
inline T *unwrap(ref P) { \
1089
T *Q = (T*)unwrap(P); \
1090
assert(Q && "Invalid cast!"); \
1094
DEFINE_ISA_CONVERSION_FUNCTIONS (Type, LLVMTypeRef )
1095
DEFINE_ISA_CONVERSION_FUNCTIONS (Value, LLVMValueRef )
1096
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef )
1097
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef )
1098
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef )
1099
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(PATypeHolder, LLVMTypeHandleRef )
1100
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef )
1101
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef )
1102
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use, LLVMUseRef )
1103
DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef )
1104
/* LLVMModuleProviderRef exists for historical reasons, but now just holds a
1107
inline Module *unwrap(LLVMModuleProviderRef MP) {
1108
return reinterpret_cast<Module*>(MP);
1111
#undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
1112
#undef DEFINE_ISA_CONVERSION_FUNCTIONS
1113
#undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
1115
/* Specialized opaque context conversions.
1117
inline LLVMContext **unwrap(LLVMContextRef* Tys) {
1118
return reinterpret_cast<LLVMContext**>(Tys);
1121
inline LLVMContextRef *wrap(const LLVMContext **Tys) {
1122
return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys));
1125
/* Specialized opaque type conversions.
1127
inline Type **unwrap(LLVMTypeRef* Tys) {
1128
return reinterpret_cast<Type**>(Tys);
1131
inline LLVMTypeRef *wrap(const Type **Tys) {
1132
return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
1135
/* Specialized opaque value conversions.
1137
inline Value **unwrap(LLVMValueRef *Vals) {
1138
return reinterpret_cast<Value**>(Vals);
1141
template<typename T>
1142
inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
1144
for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
1147
return reinterpret_cast<T**>(Vals);
1150
inline LLVMValueRef *wrap(const Value **Vals) {
1151
return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
1155
#endif /* !defined(__cplusplus) */
1157
#endif /* !defined(LLVM_C_CORE_H) */