1 /*===-- llvm-c/Core.h - Core Library C Interface ------------------*- C -*-===*\
3 |* The LLVM Compiler Infrastructure *|
5 |* This file was developed by Gordon Henriksen and is distributed under the *|
6 |* University of Illinois Open Source 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 \*===----------------------------------------------------------------------===*/
38 /* Need these includes to support the LLVM 'cast' template for the C++ 'wrap'
39 and 'unwrap' conversion functions. */
40 #include "llvm/Module.h"
41 #include "llvm/Support/LLVMBuilder.h"
48 typedef struct LLVMOpaqueModule *LLVMModuleRef;
49 typedef struct LLVMOpaqueType *LLVMTypeRef;
50 typedef struct LLVMOpaqueTypeHandle *LLVMTypeHandleRef;
51 typedef struct LLVMOpaqueValue *LLVMValueRef;
52 typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
53 typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
55 /* Used to provide a module to JIT or interpreter.
56 * See the llvm::ModuleProvider class.
58 typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
60 /* Used to provide a module to JIT or interpreter.
61 * See the llvm::MemoryBuffer class.
63 typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
66 LLVMVoidTypeKind, /* type with no size */
67 LLVMFloatTypeKind, /* 32 bit floating point type */
68 LLVMDoubleTypeKind, /* 64 bit floating point type */
69 LLVMX86_FP80TypeKind, /* 80 bit floating point type (X87) */
70 LLVMFP128TypeKind, /* 128 bit floating point type (112-bit mantissa) */
71 LLVMPPC_FP128TypeKind, /* 128 bit floating point type (two 64-bits) */
72 LLVMLabelTypeKind, /* Labels */
73 LLVMIntegerTypeKind, /* Arbitrary bit width integers */
74 LLVMFunctionTypeKind, /* Functions */
75 LLVMStructTypeKind, /* Structures */
76 LLVMArrayTypeKind, /* Arrays */
77 LLVMPointerTypeKind, /* Pointers */
78 LLVMOpaqueTypeKind, /* Opaque: type with unknown structure */
79 LLVMVectorTypeKind /* SIMD 'packed' format, or other vector type */
83 LLVMExternalLinkage, /* Externally visible function */
84 LLVMLinkOnceLinkage, /* Keep one copy of function when linking (inline) */
85 LLVMWeakLinkage, /* Keep one copy of function when linking (weak) */
86 LLVMAppendingLinkage, /* Special purpose, only applies to global arrays */
87 LLVMInternalLinkage, /* Rename collisions when linking (static functions)*/
88 LLVMDLLImportLinkage, /* Function to be imported from DLL */
89 LLVMDLLExportLinkage, /* Function to be accessible from DLL */
90 LLVMExternalWeakLinkage,/* ExternalWeak linkage description */
91 LLVMGhostLinkage /* Stand-in functions for streaming fns from bitcode*/
95 LLVMDefaultVisibility, /* The GV is visible */
96 LLVMHiddenVisibility, /* The GV is hidden */
97 LLVMProtectedVisibility /* The GV is protected */
102 LLVMFastCallConv = 8,
103 LLVMColdCallConv = 9,
104 LLVMX86StdcallCallConv = 64,
105 LLVMX86FastcallCallConv = 65
109 LLVMIntEQ = 32, /* equal */
110 LLVMIntNE, /* not equal */
111 LLVMIntUGT, /* unsigned greater than */
112 LLVMIntUGE, /* unsigned greater or equal */
113 LLVMIntULT, /* unsigned less than */
114 LLVMIntULE, /* unsigned less or equal */
115 LLVMIntSGT, /* signed greater than */
116 LLVMIntSGE, /* signed greater or equal */
117 LLVMIntSLT, /* signed less than */
118 LLVMIntSLE /* signed less or equal */
122 LLVMRealPredicateFalse, /* Always false (always folded) */
123 LLVMRealOEQ, /* True if ordered and equal */
124 LLVMRealOGT, /* True if ordered and greater than */
125 LLVMRealOGE, /* True if ordered and greater than or equal */
126 LLVMRealOLT, /* True if ordered and less than */
127 LLVMRealOLE, /* True if ordered and less than or equal */
128 LLVMRealONE, /* True if ordered and operands are unequal */
129 LLVMRealORD, /* True if ordered (no nans) */
130 LLVMRealUNO, /* True if unordered: isnan(X) | isnan(Y) */
131 LLVMRealUEQ, /* True if unordered or equal */
132 LLVMRealUGT, /* True if unordered or greater than */
133 LLVMRealUGE, /* True if unordered, greater than, or equal */
134 LLVMRealULT, /* True if unordered or less than */
135 LLVMRealULE, /* True if unordered, less than, or equal */
136 LLVMRealUNE, /* True if unordered or not equal */
137 LLVMRealPredicateTrue /* Always true (always folded) */
141 /*===-- Error handling ----------------------------------------------------===*/
143 void LLVMDisposeMessage(char *Message);
146 /*===-- Modules -----------------------------------------------------------===*/
148 /* Create and destroy modules. */
149 LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
150 void LLVMDisposeModule(LLVMModuleRef M);
152 /* Same as Module::addTypeName. */
153 int LLVMAddTypeName(LLVMModuleRef M, const char *Name, LLVMTypeRef Ty);
154 void LLVMDeleteTypeName(LLVMModuleRef M, const char *Name);
157 /*===-- Types -------------------------------------------------------------===*/
159 /* LLVM types conform to the following hierarchy:
174 LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
175 void LLVMRefineAbstractType(LLVMTypeRef AbstractType, LLVMTypeRef ConcreteType);
177 /* Operations on integer types */
178 LLVMTypeRef LLVMInt1Type();
179 LLVMTypeRef LLVMInt8Type();
180 LLVMTypeRef LLVMInt16Type();
181 LLVMTypeRef LLVMInt32Type();
182 LLVMTypeRef LLVMInt64Type();
183 LLVMTypeRef LLVMIntType(unsigned NumBits);
184 unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
186 /* Operations on real types */
187 LLVMTypeRef LLVMFloatType();
188 LLVMTypeRef LLVMDoubleType();
189 LLVMTypeRef LLVMX86FP80Type();
190 LLVMTypeRef LLVMFP128Type();
191 LLVMTypeRef LLVMPPCFP128Type();
193 /* Operations on function types */
194 LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
195 LLVMTypeRef *ParamTypes, unsigned ParamCount,
197 int LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
198 LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
199 unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
200 void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
202 /* Operations on struct types */
203 LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
205 unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
206 void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
207 int LLVMIsPackedStruct(LLVMTypeRef StructTy);
209 /* Operations on array, pointer, and vector types (sequence types) */
210 LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
211 LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
212 LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
214 LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
215 unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
216 unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
217 unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
219 /* Operations on other types */
220 LLVMTypeRef LLVMVoidType();
221 LLVMTypeRef LLVMLabelType();
222 LLVMTypeRef LLVMOpaqueType();
224 /* Operations on type handles */
225 LLVMTypeHandleRef LLVMCreateTypeHandle(LLVMTypeRef PotentiallyAbstractTy);
226 void LLVMRefineType(LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy);
227 LLVMTypeRef LLVMResolveTypeHandle(LLVMTypeHandleRef TypeHandle);
228 void LLVMDisposeTypeHandle(LLVMTypeHandleRef TypeHandle);
231 /*===-- Values ------------------------------------------------------------===*/
233 /* The bulk of LLVM's object model consists of values, which comprise a very
234 * rich type hierarchy.
247 /* Operations on all values */
248 LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
249 const char *LLVMGetValueName(LLVMValueRef Val);
250 void LLVMSetValueName(LLVMValueRef Val, const char *Name);
251 void LLVMDumpValue(LLVMValueRef Val);
253 /* Operations on constants of any type */
254 LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
255 LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
256 LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
257 int LLVMIsConstant(LLVMValueRef Val);
258 int LLVMIsNull(LLVMValueRef Val);
259 int LLVMIsUndef(LLVMValueRef Val);
261 /* Operations on scalar constants */
262 LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
264 LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
266 /* Operations on composite constants */
267 LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
268 int DontNullTerminate);
269 LLVMValueRef LLVMConstArray(LLVMTypeRef ArrayTy,
270 LLVMValueRef *ConstantVals, unsigned Length);
271 LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
273 LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
275 /* Constant expressions */
276 LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
277 LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
278 LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
279 LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
280 LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
281 LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
282 LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
283 LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
284 LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
285 LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
286 LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
287 LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
288 LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
289 LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
290 LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
291 LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
292 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
293 LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
294 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
295 LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
296 LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
297 LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
298 LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
299 LLVMValueRef *ConstantIndices, unsigned NumIndices);
300 LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
301 LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
302 LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
303 LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
304 LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
305 LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
306 LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
307 LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
308 LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
309 LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
310 LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
311 LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
312 LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
313 LLVMValueRef ConstantIfTrue,
314 LLVMValueRef ConstantIfFalse);
315 LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
316 LLVMValueRef IndexConstant);
317 LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
318 LLVMValueRef ElementValueConstant,
319 LLVMValueRef IndexConstant);
320 LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
321 LLVMValueRef VectorBConstant,
322 LLVMValueRef MaskConstant);
324 /* Operations on global variables, functions, and aliases (globals) */
325 int LLVMIsDeclaration(LLVMValueRef Global);
326 LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
327 void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
328 const char *LLVMGetSection(LLVMValueRef Global);
329 void LLVMSetSection(LLVMValueRef Global, const char *Section);
330 LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
331 void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
332 unsigned LLVMGetAlignment(LLVMValueRef Global);
333 void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
335 /* Operations on global variables */
336 LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
337 LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
338 void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
339 int LLVMHasInitializer(LLVMValueRef GlobalVar);
340 LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
341 void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
342 int LLVMIsThreadLocal(LLVMValueRef GlobalVar);
343 void LLVMSetThreadLocal(LLVMValueRef GlobalVar, int IsThreadLocal);
344 int LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
345 void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, int IsConstant);
347 /* Operations on functions */
348 LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
349 LLVMTypeRef FunctionTy);
350 LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
351 void LLVMDeleteFunction(LLVMValueRef Fn);
352 unsigned LLVMCountParams(LLVMValueRef Fn);
353 void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
354 LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
355 unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
356 unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
357 void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
358 const char *LLVMGetCollector(LLVMValueRef Fn);
359 void LLVMSetCollector(LLVMValueRef Fn, const char *Coll);
361 /* Operations on basic blocks */
362 LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef Bb);
363 int LLVMValueIsBasicBlock(LLVMValueRef Val);
364 LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
365 unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
366 void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
367 LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
368 LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
369 LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
371 void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
373 /* Operations on phi nodes */
374 void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
375 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
376 unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
377 LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
378 LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
380 /*===-- Instruction builders ----------------------------------------------===*/
382 /* An instruction builder represents a point within a basic block, and is the
383 * exclusive means of building instructions using the C interface.
386 LLVMBuilderRef LLVMCreateBuilder();
387 void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
388 void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
389 void LLVMDisposeBuilder(LLVMBuilderRef Builder);
392 LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
393 LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
394 LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
395 LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
396 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
397 LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
398 LLVMBasicBlockRef Else, unsigned NumCases);
399 LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
400 LLVMValueRef *Args, unsigned NumArgs,
401 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
403 LLVMValueRef LLVMBuildUnwind(LLVMBuilderRef);
404 LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
407 LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
409 LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
411 LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
413 LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
415 LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
417 LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
419 LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
421 LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
423 LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
425 LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
427 LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
429 LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
431 LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
433 LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
435 LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
437 LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
438 LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
441 LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
442 LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
443 LLVMValueRef Val, const char *Name);
444 LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
445 LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
446 LLVMValueRef Val, const char *Name);
447 LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
448 LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
450 LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
451 LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
452 LLVMValueRef *Indices, unsigned NumIndices,
456 LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
457 LLVMTypeRef DestTy, const char *Name);
458 LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
459 LLVMTypeRef DestTy, const char *Name);
460 LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
461 LLVMTypeRef DestTy, const char *Name);
462 LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
463 LLVMTypeRef DestTy, const char *Name);
464 LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
465 LLVMTypeRef DestTy, const char *Name);
466 LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
467 LLVMTypeRef DestTy, const char *Name);
468 LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
469 LLVMTypeRef DestTy, const char *Name);
470 LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
471 LLVMTypeRef DestTy, const char *Name);
472 LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
473 LLVMTypeRef DestTy, const char *Name);
474 LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
475 LLVMTypeRef DestTy, const char *Name);
476 LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
477 LLVMTypeRef DestTy, const char *Name);
478 LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
479 LLVMTypeRef DestTy, const char *Name);
482 LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
483 LLVMValueRef LHS, LLVMValueRef RHS,
485 LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
486 LLVMValueRef LHS, LLVMValueRef RHS,
489 /* Miscellaneous instructions */
490 LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
491 LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
492 LLVMValueRef *Args, unsigned NumArgs,
494 LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
495 LLVMValueRef Then, LLVMValueRef Else,
497 LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
499 LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
500 LLVMValueRef Index, const char *Name);
501 LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
502 LLVMValueRef EltVal, LLVMValueRef Index,
504 LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
505 LLVMValueRef V2, LLVMValueRef Mask,
509 /*===-- Module providers --------------------------------------------------===*/
511 /* Encapsulates the module M in a module provider, taking ownership of the
513 * See the constructor llvm::ExistingModuleProvider::ExistingModuleProvider.
515 LLVMModuleProviderRef
516 LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
518 /* Destroys the module provider MP as well as the contained module.
519 * See the destructor llvm::ModuleProvider::~ModuleProvider.
521 void LLVMDisposeModuleProvider(LLVMModuleProviderRef MP);
524 /*===-- Memory buffers ----------------------------------------------------===*/
526 int LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
527 LLVMMemoryBufferRef *OutMemBuf,
529 int LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
531 void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
537 class ModuleProvider;
540 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
541 inline ty *unwrap(ref P) { \
542 return reinterpret_cast<ty*>(P); \
545 inline ref wrap(const ty *P) { \
546 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
549 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Type, LLVMTypeRef )
550 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Value, LLVMValueRef )
551 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef )
552 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef )
553 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMBuilder, LLVMBuilderRef )
554 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(PATypeHolder, LLVMTypeHandleRef )
555 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ModuleProvider, LLVMModuleProviderRef)
556 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef )
558 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
560 /* Specialized opaque type conversions.
563 inline T *unwrap(LLVMTypeRef Ty) {
564 return cast<T>(unwrap(Ty));
567 inline Type **unwrap(LLVMTypeRef* Tys) {
568 return reinterpret_cast<Type**>(Tys);
571 inline LLVMTypeRef *wrap(const Type **Tys) {
572 return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
575 /* Specialized opaque value conversions.
578 inline T *unwrap(LLVMValueRef Val) {
579 return cast<T>(unwrap(Val));
582 inline Value **unwrap(LLVMValueRef *Vals) {
583 return reinterpret_cast<Value**>(Vals);
587 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
589 for (LLVMValueRef *I = Vals, E = Vals + Length; I != E; ++I)
592 return reinterpret_cast<T**>(Vals);
595 inline LLVMValueRef *wrap(const Value **Vals) {
596 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
600 #endif /* !defined(__cplusplus) */
602 #endif /* !defined(LLVM_C_CORE_H) */