1/*
2 * Copyright (C) 2013 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef LLVMAPIFunctions_h
27#define LLVMAPIFunctions_h
28
29#include "LLVMHeaders.h"
30
31#define FOR_EACH_LLVM_API_FUNCTION(macro) \
32    macro(void, InitializeCore, (LLVMPassRegistryRef R)) \
33    macro(void, Shutdown, ()) \
34    macro(char *, CreateMessage, (const char *Message)) \
35    macro(void, DisposeMessage, (char *Message)) \
36    macro(void, InstallFatalErrorHandler, (LLVMFatalErrorHandler Handler)) \
37    macro(LLVMContextRef, ContextCreate, (void)) \
38    macro(LLVMContextRef, GetGlobalContext, (void)) \
39    macro(void, ContextDispose, (LLVMContextRef C)) \
40    macro(unsigned, GetMDKindIDInContext, (LLVMContextRef C, const char* Name, unsigned SLen)) \
41    macro(unsigned, GetMDKindID, (const char* Name, unsigned SLen)) \
42    macro(LLVMModuleRef, ModuleCreateWithName, (const char *ModuleID)) \
43    macro(LLVMModuleRef, ModuleCreateWithNameInContext, (const char *ModuleID, LLVMContextRef C)) \
44    macro(void, DisposeModule, (LLVMModuleRef M)) \
45    macro(const char *, GetDataLayout, (LLVMModuleRef M)) \
46    macro(void, SetDataLayout, (LLVMModuleRef M, const char *Triple)) \
47    macro(const char *, GetTarget, (LLVMModuleRef M)) \
48    macro(void, SetTarget, (LLVMModuleRef M, const char *Triple)) \
49    macro(void, DumpModule, (LLVMModuleRef M)) \
50    macro(LLVMBool, PrintModuleToFile, (LLVMModuleRef M, const char *Filename, char **ErrorMessage)) \
51    macro(void, SetModuleInlineAsm, (LLVMModuleRef M, const char *Asm)) \
52    macro(LLVMContextRef, GetModuleContext, (LLVMModuleRef M)) \
53    macro(LLVMTypeRef, GetTypeByName, (LLVMModuleRef M, const char *Name)) \
54    macro(unsigned, GetNamedMetadataNumOperands, (LLVMModuleRef M, const char* name)) \
55    macro(void, GetNamedMetadataOperands, (LLVMModuleRef M, const char* name, LLVMValueRef *Dest)) \
56    macro(void, AddNamedMetadataOperand, (LLVMModuleRef M, const char* name, LLVMValueRef Val)) \
57    macro(LLVMValueRef, AddFunction, (LLVMModuleRef M, const char *Name, LLVMTypeRef FunctionTy)) \
58    macro(LLVMValueRef, GetNamedFunction, (LLVMModuleRef M, const char *Name)) \
59    macro(LLVMValueRef, GetFirstFunction, (LLVMModuleRef M)) \
60    macro(LLVMValueRef, GetLastFunction, (LLVMModuleRef M)) \
61    macro(LLVMValueRef, GetNextFunction, (LLVMValueRef Fn)) \
62    macro(LLVMValueRef, GetPreviousFunction, (LLVMValueRef Fn)) \
63    macro(LLVMTypeKind, GetTypeKind, (LLVMTypeRef Ty)) \
64    macro(LLVMBool, TypeIsSized, (LLVMTypeRef Ty)) \
65    macro(LLVMContextRef, GetTypeContext, (LLVMTypeRef Ty)) \
66    macro(LLVMTypeRef, Int1TypeInContext, (LLVMContextRef C)) \
67    macro(LLVMTypeRef, Int8TypeInContext, (LLVMContextRef C)) \
68    macro(LLVMTypeRef, Int16TypeInContext, (LLVMContextRef C)) \
69    macro(LLVMTypeRef, Int32TypeInContext, (LLVMContextRef C)) \
70    macro(LLVMTypeRef, Int64TypeInContext, (LLVMContextRef C)) \
71    macro(LLVMTypeRef, IntTypeInContext, (LLVMContextRef C, unsigned NumBits)) \
72    macro(LLVMTypeRef, Int1Type, (void)) \
73    macro(LLVMTypeRef, Int8Type, (void)) \
74    macro(LLVMTypeRef, Int16Type, (void)) \
75    macro(LLVMTypeRef, Int32Type, (void)) \
76    macro(LLVMTypeRef, Int64Type, (void)) \
77    macro(LLVMTypeRef, IntType, (unsigned NumBits)) \
78    macro(unsigned, GetIntTypeWidth, (LLVMTypeRef IntegerTy)) \
79    macro(LLVMTypeRef, HalfTypeInContext, (LLVMContextRef C)) \
80    macro(LLVMTypeRef, FloatTypeInContext, (LLVMContextRef C)) \
81    macro(LLVMTypeRef, DoubleTypeInContext, (LLVMContextRef C)) \
82    macro(LLVMTypeRef, X86FP80TypeInContext, (LLVMContextRef C)) \
83    macro(LLVMTypeRef, FP128TypeInContext, (LLVMContextRef C)) \
84    macro(LLVMTypeRef, PPCFP128TypeInContext, (LLVMContextRef C)) \
85    macro(LLVMTypeRef, HalfType, (void)) \
86    macro(LLVMTypeRef, FloatType, (void)) \
87    macro(LLVMTypeRef, DoubleType, (void)) \
88    macro(LLVMTypeRef, X86FP80Type, (void)) \
89    macro(LLVMTypeRef, FP128Type, (void)) \
90    macro(LLVMTypeRef, PPCFP128Type, (void)) \
91    macro(LLVMTypeRef, FunctionType, (LLVMTypeRef ReturnType, LLVMTypeRef *ParamTypes, unsigned ParamCount, LLVMBool IsVarArg)) \
92    macro(LLVMBool, IsFunctionVarArg, (LLVMTypeRef FunctionTy)) \
93    macro(LLVMTypeRef, GetReturnType, (LLVMTypeRef FunctionTy)) \
94    macro(unsigned, CountParamTypes, (LLVMTypeRef FunctionTy)) \
95    macro(void, GetParamTypes, (LLVMTypeRef FunctionTy, LLVMTypeRef *Dest)) \
96    macro(LLVMTypeRef, StructTypeInContext, (LLVMContextRef C, LLVMTypeRef *ElementTypes, unsigned ElementCount, LLVMBool Packed)) \
97    macro(LLVMTypeRef, StructType, (LLVMTypeRef *ElementTypes, unsigned ElementCount, LLVMBool Packed)) \
98    macro(LLVMTypeRef, StructCreateNamed, (LLVMContextRef C, const char *Name)) \
99    macro(const char *, GetStructName, (LLVMTypeRef Ty)) \
100    macro(void, StructSetBody, (LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes, unsigned ElementCount, LLVMBool Packed)) \
101    macro(unsigned, CountStructElementTypes, (LLVMTypeRef StructTy)) \
102    macro(void, GetStructElementTypes, (LLVMTypeRef StructTy, LLVMTypeRef *Dest)) \
103    macro(LLVMBool, IsPackedStruct, (LLVMTypeRef StructTy)) \
104    macro(LLVMBool, IsOpaqueStruct, (LLVMTypeRef StructTy)) \
105    macro(LLVMTypeRef, GetElementType, (LLVMTypeRef Ty)) \
106    macro(LLVMTypeRef, ArrayType, (LLVMTypeRef ElementType, unsigned ElementCount)) \
107    macro(unsigned, GetArrayLength, (LLVMTypeRef ArrayTy)) \
108    macro(LLVMTypeRef, PointerType, (LLVMTypeRef ElementType, unsigned AddressSpace)) \
109    macro(unsigned, GetPointerAddressSpace, (LLVMTypeRef PointerTy)) \
110    macro(LLVMTypeRef, VectorType, (LLVMTypeRef ElementType, unsigned ElementCount)) \
111    macro(unsigned, GetVectorSize, (LLVMTypeRef VectorTy)) \
112    macro(LLVMTypeRef, VoidTypeInContext, (LLVMContextRef C)) \
113    macro(LLVMTypeRef, LabelTypeInContext, (LLVMContextRef C)) \
114    macro(LLVMTypeRef, X86MMXTypeInContext, (LLVMContextRef C)) \
115    macro(LLVMTypeRef, VoidType, (void)) \
116    macro(LLVMTypeRef, LabelType, (void)) \
117    macro(LLVMTypeRef, X86MMXType, (void)) \
118    macro(LLVMTypeRef, TypeOf, (LLVMValueRef Val)) \
119    macro(const char *, GetValueName, (LLVMValueRef Val)) \
120    macro(void, SetValueName, (LLVMValueRef Val, const char *Name)) \
121    macro(void, DumpValue, (LLVMValueRef Val)) \
122    macro(void, ReplaceAllUsesWith, (LLVMValueRef OldVal, LLVMValueRef NewVal)) \
123    macro(LLVMBool, IsConstant, (LLVMValueRef Val)) \
124    macro(LLVMBool, IsUndef, (LLVMValueRef Val)) \
125    macro(LLVMValueRef, IsAArgument, (LLVMValueRef Val)) \
126    macro(LLVMValueRef, IsABasicBlock, (LLVMValueRef Val)) \
127    macro(LLVMValueRef, IsAInlineAsm, (LLVMValueRef Val)) \
128    macro(LLVMValueRef, IsAMDNode, (LLVMValueRef Val)) \
129    macro(LLVMValueRef, IsAMDString, (LLVMValueRef Val)) \
130    macro(LLVMValueRef, IsAUser, (LLVMValueRef Val)) \
131    macro(LLVMValueRef, IsAConstant, (LLVMValueRef Val)) \
132    macro(LLVMValueRef, IsABlockAddress, (LLVMValueRef Val)) \
133    macro(LLVMValueRef, IsAConstantAggregateZero, (LLVMValueRef Val)) \
134    macro(LLVMValueRef, IsAConstantArray, (LLVMValueRef Val)) \
135    macro(LLVMValueRef, IsAConstantExpr, (LLVMValueRef Val)) \
136    macro(LLVMValueRef, IsAConstantFP, (LLVMValueRef Val)) \
137    macro(LLVMValueRef, IsAConstantInt, (LLVMValueRef Val)) \
138    macro(LLVMValueRef, IsAConstantPointerNull, (LLVMValueRef Val)) \
139    macro(LLVMValueRef, IsAConstantStruct, (LLVMValueRef Val)) \
140    macro(LLVMValueRef, IsAConstantVector, (LLVMValueRef Val)) \
141    macro(LLVMValueRef, IsAGlobalValue, (LLVMValueRef Val)) \
142    macro(LLVMValueRef, IsAFunction, (LLVMValueRef Val)) \
143    macro(LLVMValueRef, IsAGlobalAlias, (LLVMValueRef Val)) \
144    macro(LLVMValueRef, IsAGlobalVariable, (LLVMValueRef Val)) \
145    macro(LLVMValueRef, IsAUndefValue, (LLVMValueRef Val)) \
146    macro(LLVMValueRef, IsAInstruction, (LLVMValueRef Val)) \
147    macro(LLVMValueRef, IsABinaryOperator, (LLVMValueRef Val)) \
148    macro(LLVMValueRef, IsACallInst, (LLVMValueRef Val)) \
149    macro(LLVMValueRef, IsAIntrinsicInst, (LLVMValueRef Val)) \
150    macro(LLVMValueRef, IsADbgInfoIntrinsic, (LLVMValueRef Val)) \
151    macro(LLVMValueRef, IsADbgDeclareInst, (LLVMValueRef Val)) \
152    macro(LLVMValueRef, IsAMemIntrinsic, (LLVMValueRef Val)) \
153    macro(LLVMValueRef, IsAMemCpyInst, (LLVMValueRef Val)) \
154    macro(LLVMValueRef, IsAMemMoveInst, (LLVMValueRef Val)) \
155    macro(LLVMValueRef, IsAMemSetInst, (LLVMValueRef Val)) \
156    macro(LLVMValueRef, IsACmpInst, (LLVMValueRef Val)) \
157    macro(LLVMValueRef, IsAFCmpInst, (LLVMValueRef Val)) \
158    macro(LLVMValueRef, IsAICmpInst, (LLVMValueRef Val)) \
159    macro(LLVMValueRef, IsAExtractElementInst, (LLVMValueRef Val)) \
160    macro(LLVMValueRef, IsAGetElementPtrInst, (LLVMValueRef Val)) \
161    macro(LLVMValueRef, IsAInsertElementInst, (LLVMValueRef Val)) \
162    macro(LLVMValueRef, IsAInsertValueInst, (LLVMValueRef Val)) \
163    macro(LLVMValueRef, IsALandingPadInst, (LLVMValueRef Val)) \
164    macro(LLVMValueRef, IsAPHINode, (LLVMValueRef Val)) \
165    macro(LLVMValueRef, IsASelectInst, (LLVMValueRef Val)) \
166    macro(LLVMValueRef, IsAShuffleVectorInst, (LLVMValueRef Val)) \
167    macro(LLVMValueRef, IsAStoreInst, (LLVMValueRef Val)) \
168    macro(LLVMValueRef, IsATerminatorInst, (LLVMValueRef Val)) \
169    macro(LLVMValueRef, IsABranchInst, (LLVMValueRef Val)) \
170    macro(LLVMValueRef, IsAIndirectBrInst, (LLVMValueRef Val)) \
171    macro(LLVMValueRef, IsAInvokeInst, (LLVMValueRef Val)) \
172    macro(LLVMValueRef, IsAReturnInst, (LLVMValueRef Val)) \
173    macro(LLVMValueRef, IsASwitchInst, (LLVMValueRef Val)) \
174    macro(LLVMValueRef, IsAUnreachableInst, (LLVMValueRef Val)) \
175    macro(LLVMValueRef, IsAResumeInst, (LLVMValueRef Val)) \
176    macro(LLVMValueRef, IsAUnaryInstruction, (LLVMValueRef Val)) \
177    macro(LLVMValueRef, IsAAllocaInst, (LLVMValueRef Val)) \
178    macro(LLVMValueRef, IsACastInst, (LLVMValueRef Val)) \
179    macro(LLVMValueRef, IsABitCastInst, (LLVMValueRef Val)) \
180    macro(LLVMValueRef, IsAFPExtInst, (LLVMValueRef Val)) \
181    macro(LLVMValueRef, IsAFPToSIInst, (LLVMValueRef Val)) \
182    macro(LLVMValueRef, IsAFPToUIInst, (LLVMValueRef Val)) \
183    macro(LLVMValueRef, IsAFPTruncInst, (LLVMValueRef Val)) \
184    macro(LLVMValueRef, IsAIntToPtrInst, (LLVMValueRef Val)) \
185    macro(LLVMValueRef, IsAPtrToIntInst, (LLVMValueRef Val)) \
186    macro(LLVMValueRef, IsASExtInst, (LLVMValueRef Val)) \
187    macro(LLVMValueRef, IsASIToFPInst, (LLVMValueRef Val)) \
188    macro(LLVMValueRef, IsATruncInst, (LLVMValueRef Val)) \
189    macro(LLVMValueRef, IsAUIToFPInst, (LLVMValueRef Val)) \
190    macro(LLVMValueRef, IsAZExtInst, (LLVMValueRef Val)) \
191    macro(LLVMValueRef, IsAExtractValueInst, (LLVMValueRef Val)) \
192    macro(LLVMValueRef, IsALoadInst, (LLVMValueRef Val)) \
193    macro(LLVMValueRef, IsAVAArgInst, (LLVMValueRef Val)) \
194    macro(LLVMUseRef, GetFirstUse, (LLVMValueRef Val)) \
195    macro(LLVMUseRef, GetNextUse, (LLVMUseRef U)) \
196    macro(LLVMValueRef, GetUser, (LLVMUseRef U)) \
197    macro(LLVMValueRef, GetUsedValue, (LLVMUseRef U)) \
198    macro(LLVMValueRef, GetOperand, (LLVMValueRef Val, unsigned Index)) \
199    macro(void, SetOperand, (LLVMValueRef User, unsigned Index, LLVMValueRef Val)) \
200    macro(int, GetNumOperands, (LLVMValueRef Val)) \
201    macro(LLVMValueRef, ConstNull, (LLVMTypeRef Ty)) \
202    macro(LLVMValueRef, ConstAllOnes, (LLVMTypeRef Ty)) \
203    macro(LLVMValueRef, GetUndef, (LLVMTypeRef Ty)) \
204    macro(LLVMBool, IsNull, (LLVMValueRef Val)) \
205    macro(LLVMValueRef, ConstPointerNull, (LLVMTypeRef Ty)) \
206    macro(LLVMValueRef, ConstInt, (LLVMTypeRef IntTy, unsigned long long N, LLVMBool SignExtend)) \
207    macro(LLVMValueRef, ConstIntOfArbitraryPrecision, (LLVMTypeRef IntTy, unsigned NumWords, const uint64_t Words[])) \
208    macro(LLVMValueRef, ConstIntOfString, (LLVMTypeRef IntTy, const char *Text, uint8_t Radix)) \
209    macro(LLVMValueRef, ConstIntOfStringAndSize, (LLVMTypeRef IntTy, const char *Text, unsigned SLen, uint8_t Radix)) \
210    macro(LLVMValueRef, ConstReal, (LLVMTypeRef RealTy, double N)) \
211    macro(LLVMValueRef, ConstRealOfString, (LLVMTypeRef RealTy, const char *Text)) \
212    macro(LLVMValueRef, ConstRealOfStringAndSize, (LLVMTypeRef RealTy, const char *Text, unsigned SLen)) \
213    macro(unsigned long long, ConstIntGetZExtValue, (LLVMValueRef ConstantVal)) \
214    macro(long long, ConstIntGetSExtValue, (LLVMValueRef ConstantVal)) \
215    macro(LLVMValueRef, ConstStringInContext, (LLVMContextRef C, const char *Str, unsigned Length, LLVMBool DontNullTerminate)) \
216    macro(LLVMValueRef, ConstString, (const char *Str, unsigned Length, LLVMBool DontNullTerminate)) \
217    macro(LLVMValueRef, ConstStructInContext, (LLVMContextRef C, LLVMValueRef *ConstantVals, unsigned Count, LLVMBool Packed)) \
218    macro(LLVMValueRef, ConstStruct, (LLVMValueRef *ConstantVals, unsigned Count, LLVMBool Packed)) \
219    macro(LLVMValueRef, ConstArray, (LLVMTypeRef ElementTy, LLVMValueRef *ConstantVals, unsigned Length)) \
220    macro(LLVMValueRef, ConstNamedStruct, (LLVMTypeRef StructTy, LLVMValueRef *ConstantVals, unsigned Count)) \
221    macro(LLVMValueRef, ConstVector, (LLVMValueRef *ScalarConstantVals, unsigned Size)) \
222    macro(LLVMOpcode, GetConstOpcode, (LLVMValueRef ConstantVal)) \
223    macro(LLVMValueRef, AlignOf, (LLVMTypeRef Ty)) \
224    macro(LLVMValueRef, SizeOf, (LLVMTypeRef Ty)) \
225    macro(LLVMValueRef, ConstNeg, (LLVMValueRef ConstantVal)) \
226    macro(LLVMValueRef, ConstNSWNeg, (LLVMValueRef ConstantVal)) \
227    macro(LLVMValueRef, ConstNUWNeg, (LLVMValueRef ConstantVal)) \
228    macro(LLVMValueRef, ConstFNeg, (LLVMValueRef ConstantVal)) \
229    macro(LLVMValueRef, ConstNot, (LLVMValueRef ConstantVal)) \
230    macro(LLVMValueRef, ConstAdd, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
231    macro(LLVMValueRef, ConstNSWAdd, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
232    macro(LLVMValueRef, ConstNUWAdd, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
233    macro(LLVMValueRef, ConstFAdd, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
234    macro(LLVMValueRef, ConstSub, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
235    macro(LLVMValueRef, ConstNSWSub, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
236    macro(LLVMValueRef, ConstNUWSub, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
237    macro(LLVMValueRef, ConstFSub, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
238    macro(LLVMValueRef, ConstMul, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
239    macro(LLVMValueRef, ConstNSWMul, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
240    macro(LLVMValueRef, ConstNUWMul, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
241    macro(LLVMValueRef, ConstFMul, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
242    macro(LLVMValueRef, ConstUDiv, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
243    macro(LLVMValueRef, ConstSDiv, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
244    macro(LLVMValueRef, ConstExactSDiv, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
245    macro(LLVMValueRef, ConstFDiv, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
246    macro(LLVMValueRef, ConstURem, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
247    macro(LLVMValueRef, ConstSRem, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
248    macro(LLVMValueRef, ConstFRem, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
249    macro(LLVMValueRef, ConstAnd, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
250    macro(LLVMValueRef, ConstOr, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
251    macro(LLVMValueRef, ConstXor, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
252    macro(LLVMValueRef, ConstICmp, (LLVMIntPredicate Predicate, LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
253    macro(LLVMValueRef, ConstFCmp, (LLVMRealPredicate Predicate, LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
254    macro(LLVMValueRef, ConstShl, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
255    macro(LLVMValueRef, ConstLShr, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
256    macro(LLVMValueRef, ConstAShr, (LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)) \
257    macro(LLVMValueRef, ConstGEP, (LLVMValueRef ConstantVal, LLVMValueRef *ConstantIndices, unsigned NumIndices)) \
258    macro(LLVMValueRef, ConstInBoundsGEP, (LLVMValueRef ConstantVal, LLVMValueRef *ConstantIndices, unsigned NumIndices)) \
259    macro(LLVMValueRef, ConstTrunc, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
260    macro(LLVMValueRef, ConstSExt, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
261    macro(LLVMValueRef, ConstZExt, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
262    macro(LLVMValueRef, ConstFPTrunc, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
263    macro(LLVMValueRef, ConstFPExt, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
264    macro(LLVMValueRef, ConstUIToFP, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
265    macro(LLVMValueRef, ConstSIToFP, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
266    macro(LLVMValueRef, ConstFPToUI, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
267    macro(LLVMValueRef, ConstFPToSI, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
268    macro(LLVMValueRef, ConstPtrToInt, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
269    macro(LLVMValueRef, ConstIntToPtr, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
270    macro(LLVMValueRef, ConstBitCast, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
271    macro(LLVMValueRef, ConstZExtOrBitCast, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
272    macro(LLVMValueRef, ConstSExtOrBitCast, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
273    macro(LLVMValueRef, ConstTruncOrBitCast, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
274    macro(LLVMValueRef, ConstPointerCast, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
275    macro(LLVMValueRef, ConstIntCast, (LLVMValueRef ConstantVal, LLVMTypeRef ToType, LLVMBool isSigned)) \
276    macro(LLVMValueRef, ConstFPCast, (LLVMValueRef ConstantVal, LLVMTypeRef ToType)) \
277    macro(LLVMValueRef, ConstSelect, (LLVMValueRef ConstantCondition, LLVMValueRef ConstantIfTrue, LLVMValueRef ConstantIfFalse)) \
278    macro(LLVMValueRef, ConstExtractElement, (LLVMValueRef VectorConstant, LLVMValueRef IndexConstant)) \
279    macro(LLVMValueRef, ConstInsertElement, (LLVMValueRef VectorConstant, LLVMValueRef ElementValueConstant, LLVMValueRef IndexConstant)) \
280    macro(LLVMValueRef, ConstShuffleVector, (LLVMValueRef VectorAConstant, LLVMValueRef VectorBConstant, LLVMValueRef MaskConstant)) \
281    macro(LLVMValueRef, ConstExtractValue, (LLVMValueRef AggConstant, unsigned *IdxList, unsigned NumIdx)) \
282    macro(LLVMValueRef, ConstInsertValue, (LLVMValueRef AggConstant, LLVMValueRef ElementValueConstant, unsigned *IdxList, unsigned NumIdx)) \
283    macro(LLVMValueRef, ConstInlineAsm, (LLVMTypeRef Ty, const char *AsmString, const char *Constraints, LLVMBool HasSideEffects, LLVMBool IsAlignStack)) \
284    macro(LLVMValueRef, BlockAddress, (LLVMValueRef F, LLVMBasicBlockRef BB)) \
285    macro(LLVMModuleRef, GetGlobalParent, (LLVMValueRef Global)) \
286    macro(LLVMBool, IsDeclaration, (LLVMValueRef Global)) \
287    macro(LLVMLinkage, GetLinkage, (LLVMValueRef Global)) \
288    macro(void, SetLinkage, (LLVMValueRef Global, LLVMLinkage Linkage)) \
289    macro(const char *, GetSection, (LLVMValueRef Global)) \
290    macro(void, SetSection, (LLVMValueRef Global, const char *Section)) \
291    macro(LLVMVisibility, GetVisibility, (LLVMValueRef Global)) \
292    macro(void, SetVisibility, (LLVMValueRef Global, LLVMVisibility Viz)) \
293    macro(unsigned, GetAlignment, (LLVMValueRef Global)) \
294    macro(void, SetAlignment, (LLVMValueRef Global, unsigned Bytes)) \
295    macro(LLVMValueRef, AddGlobal, (LLVMModuleRef M, LLVMTypeRef Ty, const char *Name)) \
296    macro(LLVMValueRef, AddGlobalInAddressSpace, (LLVMModuleRef M, LLVMTypeRef Ty, const char *Name, unsigned AddressSpace)) \
297    macro(LLVMValueRef, GetNamedGlobal, (LLVMModuleRef M, const char *Name)) \
298    macro(LLVMValueRef, GetFirstGlobal, (LLVMModuleRef M)) \
299    macro(LLVMValueRef, GetLastGlobal, (LLVMModuleRef M)) \
300    macro(LLVMValueRef, GetNextGlobal, (LLVMValueRef GlobalVar)) \
301    macro(LLVMValueRef, GetPreviousGlobal, (LLVMValueRef GlobalVar)) \
302    macro(void, DeleteGlobal, (LLVMValueRef GlobalVar)) \
303    macro(LLVMValueRef, GetInitializer, (LLVMValueRef GlobalVar)) \
304    macro(void, SetInitializer, (LLVMValueRef GlobalVar, LLVMValueRef ConstantVal)) \
305    macro(LLVMBool, IsThreadLocal, (LLVMValueRef GlobalVar)) \
306    macro(void, SetThreadLocal, (LLVMValueRef GlobalVar, LLVMBool IsThreadLocal)) \
307    macro(LLVMBool, IsGlobalConstant, (LLVMValueRef GlobalVar)) \
308    macro(void, SetGlobalConstant, (LLVMValueRef GlobalVar, LLVMBool IsConstant)) \
309    macro(LLVMThreadLocalMode, GetThreadLocalMode, (LLVMValueRef GlobalVar)) \
310    macro(void, SetThreadLocalMode, (LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode)) \
311    macro(LLVMBool, IsExternallyInitialized, (LLVMValueRef GlobalVar)) \
312    macro(void, SetExternallyInitialized, (LLVMValueRef GlobalVar, LLVMBool IsExtInit)) \
313    macro(LLVMValueRef, AddAlias, (LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee, const char *Name)) \
314    macro(void, DeleteFunction, (LLVMValueRef Fn)) \
315    macro(unsigned, GetIntrinsicID, (LLVMValueRef Fn)) \
316    macro(unsigned, GetFunctionCallConv, (LLVMValueRef Fn)) \
317    macro(void, SetFunctionCallConv, (LLVMValueRef Fn, unsigned CC)) \
318    macro(const char *, GetGC, (LLVMValueRef Fn)) \
319    macro(void, SetGC, (LLVMValueRef Fn, const char *Name)) \
320    macro(void, AddFunctionAttr, (LLVMValueRef Fn, LLVMAttribute PA)) \
321    macro(void, AddTargetDependentFunctionAttr, (LLVMValueRef Fn, const char *A, const char *V)) \
322    macro(LLVMAttribute, GetFunctionAttr, (LLVMValueRef Fn)) \
323    macro(void, RemoveFunctionAttr, (LLVMValueRef Fn, LLVMAttribute PA)) \
324    macro(unsigned, CountParams, (LLVMValueRef Fn)) \
325    macro(void, GetParams, (LLVMValueRef Fn, LLVMValueRef *Params)) \
326    macro(LLVMValueRef, GetParam, (LLVMValueRef Fn, unsigned Index)) \
327    macro(LLVMValueRef, GetParamParent, (LLVMValueRef Inst)) \
328    macro(LLVMValueRef, GetFirstParam, (LLVMValueRef Fn)) \
329    macro(LLVMValueRef, GetLastParam, (LLVMValueRef Fn)) \
330    macro(LLVMValueRef, GetNextParam, (LLVMValueRef Arg)) \
331    macro(LLVMValueRef, GetPreviousParam, (LLVMValueRef Arg)) \
332    macro(void, AddAttribute, (LLVMValueRef Arg, LLVMAttribute PA)) \
333    macro(void, RemoveAttribute, (LLVMValueRef Arg, LLVMAttribute PA)) \
334    macro(LLVMAttribute, GetAttribute, (LLVMValueRef Arg)) \
335    macro(void, SetParamAlignment, (LLVMValueRef Arg, unsigned align)) \
336    macro(LLVMValueRef, MDStringInContext, (LLVMContextRef C, const char *Str, unsigned SLen)) \
337    macro(LLVMValueRef, MDString, (const char *Str, unsigned SLen)) \
338    macro(LLVMValueRef, MDNodeInContext, (LLVMContextRef C, LLVMValueRef *Vals, unsigned Count)) \
339    macro(LLVMValueRef, MDNode, (LLVMValueRef *Vals, unsigned Count)) \
340    macro(const char *, GetMDString, (LLVMValueRef V, unsigned* Len)) \
341    macro(unsigned, GetMDNodeNumOperands, (LLVMValueRef V)) \
342    macro(void, GetMDNodeOperands, (LLVMValueRef V, LLVMValueRef *Dest)) \
343    macro(LLVMValueRef, BasicBlockAsValue, (LLVMBasicBlockRef BB)) \
344    macro(LLVMBool, ValueIsBasicBlock, (LLVMValueRef Val)) \
345    macro(LLVMBasicBlockRef, ValueAsBasicBlock, (LLVMValueRef Val)) \
346    macro(LLVMValueRef, GetBasicBlockParent, (LLVMBasicBlockRef BB)) \
347    macro(LLVMValueRef, GetBasicBlockTerminator, (LLVMBasicBlockRef BB)) \
348    macro(unsigned, CountBasicBlocks, (LLVMValueRef Fn)) \
349    macro(void, GetBasicBlocks, (LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks)) \
350    macro(LLVMBasicBlockRef, GetFirstBasicBlock, (LLVMValueRef Fn)) \
351    macro(LLVMBasicBlockRef, GetLastBasicBlock, (LLVMValueRef Fn)) \
352    macro(LLVMBasicBlockRef, GetNextBasicBlock, (LLVMBasicBlockRef BB)) \
353    macro(LLVMBasicBlockRef, GetPreviousBasicBlock, (LLVMBasicBlockRef BB)) \
354    macro(LLVMBasicBlockRef, GetEntryBasicBlock, (LLVMValueRef Fn)) \
355    macro(LLVMBasicBlockRef, AppendBasicBlockInContext, (LLVMContextRef C, LLVMValueRef Fn, const char *Name)) \
356    macro(LLVMBasicBlockRef, AppendBasicBlock, (LLVMValueRef Fn, const char *Name)) \
357    macro(LLVMBasicBlockRef, InsertBasicBlockInContext, (LLVMContextRef C, LLVMBasicBlockRef BB, const char *Name)) \
358    macro(LLVMBasicBlockRef, InsertBasicBlock, (LLVMBasicBlockRef InsertBeforeBB, const char *Name)) \
359    macro(void, DeleteBasicBlock, (LLVMBasicBlockRef BB)) \
360    macro(void, RemoveBasicBlockFromParent, (LLVMBasicBlockRef BB)) \
361    macro(void, MoveBasicBlockBefore, (LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos)) \
362    macro(void, MoveBasicBlockAfter, (LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos)) \
363    macro(LLVMValueRef, GetFirstInstruction, (LLVMBasicBlockRef BB)) \
364    macro(LLVMValueRef, GetLastInstruction, (LLVMBasicBlockRef BB)) \
365    macro(int, HasMetadata, (LLVMValueRef Val)) \
366    macro(LLVMValueRef, GetMetadata, (LLVMValueRef Val, unsigned KindID)) \
367    macro(void, SetMetadata, (LLVMValueRef Val, unsigned KindID, LLVMValueRef Node)) \
368    macro(LLVMBasicBlockRef, GetInstructionParent, (LLVMValueRef Inst)) \
369    macro(LLVMValueRef, GetNextInstruction, (LLVMValueRef Inst)) \
370    macro(LLVMValueRef, GetPreviousInstruction, (LLVMValueRef Inst)) \
371    macro(void, InstructionEraseFromParent, (LLVMValueRef Inst)) \
372    macro(LLVMOpcode, GetInstructionOpcode, (LLVMValueRef Inst)) \
373    macro(LLVMIntPredicate, GetICmpPredicate, (LLVMValueRef Inst)) \
374    macro(void, SetInstructionCallConv, (LLVMValueRef Instr, unsigned CC)) \
375    macro(unsigned, GetInstructionCallConv, (LLVMValueRef Instr)) \
376    macro(void, AddInstrAttribute, (LLVMValueRef Instr, unsigned index, LLVMAttribute)) \
377    macro(void, RemoveInstrAttribute, (LLVMValueRef Instr, unsigned index, LLVMAttribute)) \
378    macro(void, SetInstrParamAlignment, (LLVMValueRef Instr, unsigned index, unsigned align)) \
379    macro(LLVMBool, IsTailCall, (LLVMValueRef CallInst)) \
380    macro(void, SetTailCall, (LLVMValueRef CallInst, LLVMBool IsTailCall)) \
381    macro(LLVMBasicBlockRef, GetSwitchDefaultDest, (LLVMValueRef SwitchInstr)) \
382    macro(void, AddIncoming, (LLVMValueRef PhiNode, LLVMValueRef *IncomingValues, LLVMBasicBlockRef *IncomingBlocks, unsigned Count)) \
383    macro(unsigned, CountIncoming, (LLVMValueRef PhiNode)) \
384    macro(LLVMValueRef, GetIncomingValue, (LLVMValueRef PhiNode, unsigned Index)) \
385    macro(LLVMBasicBlockRef, GetIncomingBlock, (LLVMValueRef PhiNode, unsigned Index)) \
386    macro(LLVMBuilderRef, CreateBuilderInContext, (LLVMContextRef C)) \
387    macro(LLVMBuilderRef, CreateBuilder, (void)) \
388    macro(void, PositionBuilder, (LLVMBuilderRef Builder, LLVMBasicBlockRef Block, LLVMValueRef Instr)) \
389    macro(void, PositionBuilderBefore, (LLVMBuilderRef Builder, LLVMValueRef Instr)) \
390    macro(void, PositionBuilderAtEnd, (LLVMBuilderRef Builder, LLVMBasicBlockRef Block)) \
391    macro(LLVMBasicBlockRef, GetInsertBlock, (LLVMBuilderRef Builder)) \
392    macro(void, ClearInsertionPosition, (LLVMBuilderRef Builder)) \
393    macro(void, InsertIntoBuilder, (LLVMBuilderRef Builder, LLVMValueRef Instr)) \
394    macro(void, InsertIntoBuilderWithName, (LLVMBuilderRef Builder, LLVMValueRef Instr, const char *Name)) \
395    macro(void, DisposeBuilder, (LLVMBuilderRef Builder)) \
396    macro(void, SetCurrentDebugLocation, (LLVMBuilderRef Builder, LLVMValueRef L)) \
397    macro(LLVMValueRef, GetCurrentDebugLocation, (LLVMBuilderRef Builder)) \
398    macro(void, SetInstDebugLocation, (LLVMBuilderRef Builder, LLVMValueRef Inst)) \
399    macro(LLVMValueRef, BuildRetVoid, (LLVMBuilderRef)) \
400    macro(LLVMValueRef, BuildRet, (LLVMBuilderRef, LLVMValueRef V)) \
401    macro(LLVMValueRef, BuildAggregateRet, (LLVMBuilderRef, LLVMValueRef *RetVals, unsigned N)) \
402    macro(LLVMValueRef, BuildBr, (LLVMBuilderRef, LLVMBasicBlockRef Dest)) \
403    macro(LLVMValueRef, BuildCondBr, (LLVMBuilderRef, LLVMValueRef If, LLVMBasicBlockRef Then, LLVMBasicBlockRef Else)) \
404    macro(LLVMValueRef, BuildSwitch, (LLVMBuilderRef, LLVMValueRef V, LLVMBasicBlockRef Else, unsigned NumCases)) \
405    macro(LLVMValueRef, BuildIndirectBr, (LLVMBuilderRef B, LLVMValueRef Addr, unsigned NumDests)) \
406    macro(LLVMValueRef, BuildInvoke, (LLVMBuilderRef, LLVMValueRef Fn, LLVMValueRef *Args, unsigned NumArgs, LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch, const char *Name)) \
407    macro(LLVMValueRef, BuildLandingPad, (LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef PersFn, unsigned NumClauses, const char *Name)) \
408    macro(LLVMValueRef, BuildResume, (LLVMBuilderRef B, LLVMValueRef Exn)) \
409    macro(LLVMValueRef, BuildUnreachable, (LLVMBuilderRef)) \
410    macro(void, AddCase, (LLVMValueRef Switch, LLVMValueRef OnVal, LLVMBasicBlockRef Dest)) \
411    macro(void, AddDestination, (LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest)) \
412    macro(void, AddClause, (LLVMValueRef LandingPad, LLVMValueRef ClauseVal)) \
413    macro(void, SetCleanup, (LLVMValueRef LandingPad, LLVMBool Val)) \
414    macro(LLVMValueRef, BuildAdd, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
415    macro(LLVMValueRef, BuildNSWAdd, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
416    macro(LLVMValueRef, BuildNUWAdd, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
417    macro(LLVMValueRef, BuildFAdd, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
418    macro(LLVMValueRef, BuildSub, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
419    macro(LLVMValueRef, BuildNSWSub, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
420    macro(LLVMValueRef, BuildNUWSub, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
421    macro(LLVMValueRef, BuildFSub, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
422    macro(LLVMValueRef, BuildMul, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
423    macro(LLVMValueRef, BuildNSWMul, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
424    macro(LLVMValueRef, BuildNUWMul, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
425    macro(LLVMValueRef, BuildFMul, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
426    macro(LLVMValueRef, BuildUDiv, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
427    macro(LLVMValueRef, BuildSDiv, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
428    macro(LLVMValueRef, BuildExactSDiv, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
429    macro(LLVMValueRef, BuildFDiv, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
430    macro(LLVMValueRef, BuildURem, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
431    macro(LLVMValueRef, BuildSRem, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
432    macro(LLVMValueRef, BuildFRem, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
433    macro(LLVMValueRef, BuildShl, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
434    macro(LLVMValueRef, BuildLShr, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
435    macro(LLVMValueRef, BuildAShr, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
436    macro(LLVMValueRef, BuildAnd, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
437    macro(LLVMValueRef, BuildOr, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
438    macro(LLVMValueRef, BuildXor, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
439    macro(LLVMValueRef, BuildBinOp, (LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
440    macro(LLVMValueRef, BuildNeg, (LLVMBuilderRef, LLVMValueRef V, const char *Name)) \
441    macro(LLVMValueRef, BuildNSWNeg, (LLVMBuilderRef B, LLVMValueRef V, const char *Name)) \
442    macro(LLVMValueRef, BuildNUWNeg, (LLVMBuilderRef B, LLVMValueRef V, const char *Name)) \
443    macro(LLVMValueRef, BuildFNeg, (LLVMBuilderRef, LLVMValueRef V, const char *Name)) \
444    macro(LLVMValueRef, BuildNot, (LLVMBuilderRef, LLVMValueRef V, const char *Name)) \
445    macro(LLVMValueRef, BuildMalloc, (LLVMBuilderRef, LLVMTypeRef Ty, const char *Name)) \
446    macro(LLVMValueRef, BuildArrayMalloc, (LLVMBuilderRef, LLVMTypeRef Ty, LLVMValueRef Val, const char *Name)) \
447    macro(LLVMValueRef, BuildAlloca, (LLVMBuilderRef, LLVMTypeRef Ty, const char *Name)) \
448    macro(LLVMValueRef, BuildArrayAlloca, (LLVMBuilderRef, LLVMTypeRef Ty, LLVMValueRef Val, const char *Name)) \
449    macro(LLVMValueRef, BuildFree, (LLVMBuilderRef, LLVMValueRef PointerVal)) \
450    macro(LLVMValueRef, BuildLoad, (LLVMBuilderRef, LLVMValueRef PointerVal, const char *Name)) \
451    macro(LLVMValueRef, BuildStore, (LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr)) \
452    macro(LLVMValueRef, BuildGEP, (LLVMBuilderRef B, LLVMValueRef Pointer, LLVMValueRef *Indices, unsigned NumIndices, const char *Name)) \
453    macro(LLVMValueRef, BuildInBoundsGEP, (LLVMBuilderRef B, LLVMValueRef Pointer, LLVMValueRef *Indices, unsigned NumIndices, const char *Name)) \
454    macro(LLVMValueRef, BuildStructGEP, (LLVMBuilderRef B, LLVMValueRef Pointer, unsigned Idx, const char *Name)) \
455    macro(LLVMValueRef, BuildGlobalString, (LLVMBuilderRef B, const char *Str, const char *Name)) \
456    macro(LLVMValueRef, BuildGlobalStringPtr, (LLVMBuilderRef B, const char *Str, const char *Name)) \
457    macro(LLVMBool, GetVolatile, (LLVMValueRef MemoryAccessInst)) \
458    macro(void, SetVolatile, (LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile)) \
459    macro(LLVMValueRef, BuildTrunc, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
460    macro(LLVMValueRef, BuildZExt, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
461    macro(LLVMValueRef, BuildSExt, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
462    macro(LLVMValueRef, BuildFPToUI, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
463    macro(LLVMValueRef, BuildFPToSI, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
464    macro(LLVMValueRef, BuildUIToFP, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
465    macro(LLVMValueRef, BuildSIToFP, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
466    macro(LLVMValueRef, BuildFPTrunc, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
467    macro(LLVMValueRef, BuildFPExt, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
468    macro(LLVMValueRef, BuildPtrToInt, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
469    macro(LLVMValueRef, BuildIntToPtr, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
470    macro(LLVMValueRef, BuildBitCast, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
471    macro(LLVMValueRef, BuildZExtOrBitCast, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
472    macro(LLVMValueRef, BuildSExtOrBitCast, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
473    macro(LLVMValueRef, BuildTruncOrBitCast, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
474    macro(LLVMValueRef, BuildCast, (LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
475    macro(LLVMValueRef, BuildPointerCast, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
476    macro(LLVMValueRef, BuildIntCast, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
477    macro(LLVMValueRef, BuildFPCast, (LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)) \
478    macro(LLVMValueRef, BuildICmp, (LLVMBuilderRef, LLVMIntPredicate Op, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
479    macro(LLVMValueRef, BuildFCmp, (LLVMBuilderRef, LLVMRealPredicate Op, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
480    macro(LLVMValueRef, BuildPhi, (LLVMBuilderRef, LLVMTypeRef Ty, const char *Name)) \
481    macro(LLVMValueRef, BuildCall, (LLVMBuilderRef, LLVMValueRef Fn, LLVMValueRef *Args, unsigned NumArgs, const char *Name)) \
482    macro(LLVMValueRef, BuildSelect, (LLVMBuilderRef, LLVMValueRef If, LLVMValueRef Then, LLVMValueRef Else, const char *Name)) \
483    macro(LLVMValueRef, BuildVAArg, (LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty, const char *Name)) \
484    macro(LLVMValueRef, BuildExtractElement, (LLVMBuilderRef, LLVMValueRef VecVal, LLVMValueRef Index, const char *Name)) \
485    macro(LLVMValueRef, BuildInsertElement, (LLVMBuilderRef, LLVMValueRef VecVal, LLVMValueRef EltVal, LLVMValueRef Index, const char *Name)) \
486    macro(LLVMValueRef, BuildShuffleVector, (LLVMBuilderRef, LLVMValueRef V1, LLVMValueRef V2, LLVMValueRef Mask, const char *Name)) \
487    macro(LLVMValueRef, BuildExtractValue, (LLVMBuilderRef, LLVMValueRef AggVal, unsigned Index, const char *Name)) \
488    macro(LLVMValueRef, BuildInsertValue, (LLVMBuilderRef, LLVMValueRef AggVal, LLVMValueRef EltVal, unsigned Index, const char *Name)) \
489    macro(LLVMValueRef, BuildIsNull, (LLVMBuilderRef, LLVMValueRef Val, const char *Name)) \
490    macro(LLVMValueRef, BuildIsNotNull, (LLVMBuilderRef, LLVMValueRef Val, const char *Name)) \
491    macro(LLVMValueRef, BuildPtrDiff, (LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)) \
492    macro(LLVMValueRef, BuildFence, (LLVMBuilderRef B, LLVMAtomicOrdering Ordering, LLVMBool isSingleThread, const char *Name)) \
493    macro(LLVMValueRef, BuildAtomicRMW, (LLVMBuilderRef B, LLVMAtomicRMWBinOp op, LLVMValueRef PTR, LLVMValueRef Val, LLVMAtomicOrdering ordering, LLVMBool singleThread)) \
494    macro(LLVMModuleProviderRef, CreateModuleProviderForExistingModule, (LLVMModuleRef M)) \
495    macro(void, DisposeModuleProvider, (LLVMModuleProviderRef M)) \
496    macro(LLVMBool, CreateMemoryBufferWithContentsOfFile, (const char *Path, LLVMMemoryBufferRef *OutMemBuf, char **OutMessage)) \
497    macro(LLVMBool, CreateMemoryBufferWithSTDIN, (LLVMMemoryBufferRef *OutMemBuf, char **OutMessage)) \
498    macro(LLVMMemoryBufferRef, CreateMemoryBufferWithMemoryRange, (const char *InputData, size_t InputDataLength, const char *BufferName, LLVMBool RequiresNullTerminator)) \
499    macro(LLVMMemoryBufferRef, CreateMemoryBufferWithMemoryRangeCopy, (const char *InputData, size_t InputDataLength, const char *BufferName)) \
500    macro(const char *, GetBufferStart, (LLVMMemoryBufferRef MemBuf)) \
501    macro(size_t, GetBufferSize, (LLVMMemoryBufferRef MemBuf)) \
502    macro(void, DisposeMemoryBuffer, (LLVMMemoryBufferRef MemBuf)) \
503    macro(LLVMPassRegistryRef, GetGlobalPassRegistry, (void)) \
504    macro(LLVMPassManagerRef, CreatePassManager, (void)) \
505    macro(LLVMPassManagerRef, CreateFunctionPassManagerForModule, (LLVMModuleRef M)) \
506    macro(LLVMPassManagerRef, CreateFunctionPassManager, (LLVMModuleProviderRef MP)) \
507    macro(LLVMBool, RunPassManager, (LLVMPassManagerRef PM, LLVMModuleRef M)) \
508    macro(LLVMBool, InitializeFunctionPassManager, (LLVMPassManagerRef FPM)) \
509    macro(LLVMBool, RunFunctionPassManager, (LLVMPassManagerRef FPM, LLVMValueRef F)) \
510    macro(LLVMBool, FinalizeFunctionPassManager, (LLVMPassManagerRef FPM)) \
511    macro(void, DisposePassManager, (LLVMPassManagerRef PM)) \
512    macro(LLVMBool, StartMultithreaded, ()) \
513    macro(void, StopMultithreaded, ()) \
514    macro(LLVMBool, IsMultithreaded, ()) \
515    macro(LLVMTargetDataRef, CreateTargetData, (const char *StringRep)) \
516    macro(void, AddTargetData, (LLVMTargetDataRef, LLVMPassManagerRef)) \
517    macro(void, AddTargetLibraryInfo, (LLVMTargetLibraryInfoRef, LLVMPassManagerRef)) \
518    macro(char *, CopyStringRepOfTargetData, (LLVMTargetDataRef)) \
519    macro(enum LLVMByteOrdering, ByteOrder, (LLVMTargetDataRef)) \
520    macro(unsigned, PointerSize, (LLVMTargetDataRef)) \
521    macro(LLVMTypeRef, IntPtrType, (LLVMTargetDataRef)) \
522    macro(unsigned long long, SizeOfTypeInBits, (LLVMTargetDataRef, LLVMTypeRef)) \
523    macro(unsigned long long, StoreSizeOfType, (LLVMTargetDataRef, LLVMTypeRef)) \
524    macro(unsigned long long, ABISizeOfType, (LLVMTargetDataRef, LLVMTypeRef)) \
525    macro(unsigned, ABIAlignmentOfType, (LLVMTargetDataRef, LLVMTypeRef)) \
526    macro(unsigned, CallFrameAlignmentOfType, (LLVMTargetDataRef, LLVMTypeRef)) \
527    macro(unsigned, PreferredAlignmentOfType, (LLVMTargetDataRef, LLVMTypeRef)) \
528    macro(unsigned, PreferredAlignmentOfGlobal, (LLVMTargetDataRef, LLVMValueRef GlobalVar)) \
529    macro(unsigned, ElementAtOffset, (LLVMTargetDataRef, LLVMTypeRef StructTy, unsigned long long Offset)) \
530    macro(unsigned long long, OffsetOfElement, (LLVMTargetDataRef, LLVMTypeRef StructTy, unsigned Element)) \
531    macro(void, DisposeTargetData, (LLVMTargetDataRef)) \
532    macro(LLVMTargetRef, GetFirstTarget, ()) \
533    macro(LLVMTargetRef, GetNextTarget, (LLVMTargetRef T)) \
534    macro(const char *, GetTargetName, (LLVMTargetRef T)) \
535    macro(const char *, GetTargetDescription, (LLVMTargetRef T)) \
536    macro(LLVMBool, TargetHasJIT, (LLVMTargetRef T)) \
537    macro(LLVMBool, TargetHasTargetMachine, (LLVMTargetRef T)) \
538    macro(LLVMBool, TargetHasAsmBackend, (LLVMTargetRef T)) \
539    macro(void, DisposeTargetMachine, (LLVMTargetMachineRef T)) \
540    macro(LLVMTargetRef, GetTargetMachineTarget, (LLVMTargetMachineRef T)) \
541    macro(char *, GetTargetMachineTriple, (LLVMTargetMachineRef T)) \
542    macro(char *, GetTargetMachineCPU, (LLVMTargetMachineRef T)) \
543    macro(char *, GetTargetMachineFeatureString, (LLVMTargetMachineRef T)) \
544    macro(LLVMTargetDataRef, GetTargetMachineData, (LLVMTargetMachineRef T)) \
545    macro(LLVMBool, TargetMachineEmitToFile, (LLVMTargetMachineRef T, LLVMModuleRef M, char *Filename, LLVMCodeGenFileType codegen, char **ErrorMessage)) \
546    macro(void, LinkInJIT, (void)) \
547    macro(void, LinkInMCJIT, (void)) \
548    macro(void, LinkInInterpreter, (void)) \
549    macro(LLVMGenericValueRef, CreateGenericValueOfInt, (LLVMTypeRef Ty, unsigned long long N, LLVMBool IsSigned)) \
550    macro(LLVMGenericValueRef, CreateGenericValueOfPointer, (void *P)) \
551    macro(LLVMGenericValueRef, CreateGenericValueOfFloat, (LLVMTypeRef Ty, double N)) \
552    macro(unsigned, GenericValueIntWidth, (LLVMGenericValueRef GenValRef)) \
553    macro(unsigned long long, GenericValueToInt, (LLVMGenericValueRef GenVal, LLVMBool IsSigned)) \
554    macro(void *, GenericValueToPointer, (LLVMGenericValueRef GenVal)) \
555    macro(double, GenericValueToFloat, (LLVMTypeRef TyRef, LLVMGenericValueRef GenVal)) \
556    macro(void, DisposeGenericValue, (LLVMGenericValueRef GenVal)) \
557    macro(LLVMBool, CreateExecutionEngineForModule, (LLVMExecutionEngineRef *OutEE, LLVMModuleRef M, char **OutError)) \
558    macro(LLVMBool, CreateInterpreterForModule, (LLVMExecutionEngineRef *OutInterp, LLVMModuleRef M, char **OutError)) \
559    macro(LLVMBool, CreateJITCompilerForModule, (LLVMExecutionEngineRef *OutJIT, LLVMModuleRef M, unsigned OptLevel, char **OutError)) \
560    macro(void, InitializeMCJITCompilerOptions, (struct LLVMMCJITCompilerOptions *Options, size_t SizeOfOptions)) \
561    macro(LLVMBool, CreateMCJITCompilerForModule, (LLVMExecutionEngineRef *OutJIT, LLVMModuleRef M, struct LLVMMCJITCompilerOptions *Options, size_t SizeOfOptions, char **OutError)) \
562    macro(LLVMBool, CreateExecutionEngine, (LLVMExecutionEngineRef *OutEE, LLVMModuleProviderRef MP, char **OutError)) \
563    macro(LLVMBool, CreateInterpreter, (LLVMExecutionEngineRef *OutInterp, LLVMModuleProviderRef MP, char **OutError)) \
564    macro(LLVMBool, CreateJITCompiler, (LLVMExecutionEngineRef *OutJIT, LLVMModuleProviderRef MP, unsigned OptLevel, char **OutError)) \
565    macro(void, DisposeExecutionEngine, (LLVMExecutionEngineRef EE)) \
566    macro(void, RunStaticConstructors, (LLVMExecutionEngineRef EE)) \
567    macro(void, RunStaticDestructors, (LLVMExecutionEngineRef EE)) \
568    macro(int, RunFunctionAsMain, (LLVMExecutionEngineRef EE, LLVMValueRef F, unsigned ArgC, const char * const *ArgV, const char * const *EnvP)) \
569    macro(LLVMGenericValueRef, RunFunction, (LLVMExecutionEngineRef EE, LLVMValueRef F, unsigned NumArgs, LLVMGenericValueRef *Args)) \
570    macro(void, FreeMachineCodeForFunction, (LLVMExecutionEngineRef EE, LLVMValueRef F)) \
571    macro(void, AddModule, (LLVMExecutionEngineRef EE, LLVMModuleRef M)) \
572    macro(void, AddModuleProvider, (LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP)) \
573    macro(LLVMBool, RemoveModule, (LLVMExecutionEngineRef EE, LLVMModuleRef M, LLVMModuleRef *OutMod, char **OutError)) \
574    macro(LLVMBool, RemoveModuleProvider, (LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP, LLVMModuleRef *OutMod, char **OutError)) \
575    macro(LLVMBool, FindFunction, (LLVMExecutionEngineRef EE, const char *Name, LLVMValueRef *OutFn)) \
576    macro(void *, RecompileAndRelinkFunction, (LLVMExecutionEngineRef EE, LLVMValueRef Fn)) \
577    macro(LLVMTargetDataRef, GetExecutionEngineTargetData, (LLVMExecutionEngineRef EE)) \
578    macro(void, AddGlobalMapping, (LLVMExecutionEngineRef EE, LLVMValueRef Global, void* Addr)) \
579    macro(void *, GetPointerToGlobal, (LLVMExecutionEngineRef EE, LLVMValueRef Global)) \
580    macro(LLVMMCJITMemoryManagerRef, CreateSimpleMCJITMemoryManager, (void *Opaque, LLVMMemoryManagerAllocateCodeSectionCallback AllocateCodeSection, LLVMMemoryManagerAllocateDataSectionCallback AllocateDataSection, LLVMMemoryManagerFinalizeMemoryCallback FinalizeMemory, LLVMMemoryManagerDestroyCallback Destory)) \
581    macro(void, DisposeMCJITMemoryManager, (LLVMMCJITMemoryManagerRef MM)) \
582    macro(LLVMBool, VerifyModule, (LLVMModuleRef M, LLVMVerifierFailureAction Action, char **OutMessage)) \
583    macro(LLVMBool, VerifyFunction, (LLVMValueRef Fn, LLVMVerifierFailureAction Action)) \
584    macro(void, ViewFunctionCFG, (LLVMValueRef Fn)) \
585    macro(void, ViewFunctionCFGOnly, (LLVMValueRef Fn)) \
586    macro(LLVMDisasmContextRef, CreateDisasm, (const char *TripleName, void *DisInfo, int TagType, LLVMOpInfoCallback GetOpInfo, LLVMSymbolLookupCallback SymbolLookUp)) \
587    macro(LLVMDisasmContextRef, CreateDisasmCPU, (const char *Triple, const char *CPU, void *DisInfo, int TagType, LLVMOpInfoCallback GetOpInfo, LLVMSymbolLookupCallback SymbolLookUp)) \
588    macro(int, SetDisasmOptions, (LLVMDisasmContextRef DC, uint64_t Options)) \
589    macro(void, DisasmDispose, (LLVMDisasmContextRef DC)) \
590    macro(size_t, DisasmInstruction, (LLVMDisasmContextRef DC, uint8_t *Bytes, uint64_t BytesSize, uint64_t PC, char *OutString, size_t OutStringSize)) \
591    macro(unsigned, PointerSizeForAS, (LLVMTargetDataRef, unsigned AS)) \
592    macro(LLVMTypeRef, IntPtrTypeForAS, (LLVMTargetDataRef, unsigned AS)) \
593    macro(LLVMPassManagerBuilderRef, PassManagerBuilderCreate, (void)) \
594    macro(void, PassManagerBuilderDispose, (LLVMPassManagerBuilderRef PMB)) \
595    macro(void, PassManagerBuilderSetOptLevel, (LLVMPassManagerBuilderRef PMB, unsigned OptLevel)) \
596    macro(void, PassManagerBuilderSetSizeLevel, (LLVMPassManagerBuilderRef PMB, unsigned SizeLevel)) \
597    macro(void, PassManagerBuilderSetDisableUnitAtATime, (LLVMPassManagerBuilderRef PMB, LLVMBool Value)) \
598    macro(void, PassManagerBuilderSetDisableUnrollLoops, (LLVMPassManagerBuilderRef PMB, LLVMBool Value)) \
599    macro(void, PassManagerBuilderSetDisableSimplifyLibCalls, (LLVMPassManagerBuilderRef PMB, LLVMBool Value)) \
600    macro(void, PassManagerBuilderUseInlinerWithThreshold, (LLVMPassManagerBuilderRef PMB, unsigned Threshold)) \
601    macro(void, PassManagerBuilderPopulateFunctionPassManager, (LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM)) \
602    macro(void, PassManagerBuilderPopulateModulePassManager, (LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM)) \
603    macro(void, PassManagerBuilderPopulateLTOPassManager, (LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM, LLVMBool Internalize, LLVMBool RunInliner)) \
604    macro(void, AddAggressiveDCEPass, (LLVMPassManagerRef PM)) \
605    macro(void, AddCFGSimplificationPass, (LLVMPassManagerRef PM)) \
606    macro(void, AddDeadStoreEliminationPass, (LLVMPassManagerRef PM)) \
607    macro(void, AddGVNPass, (LLVMPassManagerRef PM)) \
608    macro(void, AddIndVarSimplifyPass, (LLVMPassManagerRef PM)) \
609    macro(void, AddInstructionCombiningPass, (LLVMPassManagerRef PM)) \
610    macro(void, AddJumpThreadingPass, (LLVMPassManagerRef PM)) \
611    macro(void, AddLICMPass, (LLVMPassManagerRef PM)) \
612    macro(void, AddLoopDeletionPass, (LLVMPassManagerRef PM)) \
613    macro(void, AddLoopIdiomPass, (LLVMPassManagerRef PM)) \
614    macro(void, AddLoopRotatePass, (LLVMPassManagerRef PM)) \
615    macro(void, AddLoopUnrollPass, (LLVMPassManagerRef PM)) \
616    macro(void, AddLoopUnswitchPass, (LLVMPassManagerRef PM)) \
617    macro(void, AddMemCpyOptPass, (LLVMPassManagerRef PM)) \
618    macro(void, AddPartiallyInlineLibCallsPass, (LLVMPassManagerRef PM)) \
619    macro(void, AddPromoteMemoryToRegisterPass, (LLVMPassManagerRef PM)) \
620    macro(void, AddReassociatePass, (LLVMPassManagerRef PM)) \
621    macro(void, AddSCCPPass, (LLVMPassManagerRef PM)) \
622    macro(void, AddScalarReplAggregatesPass, (LLVMPassManagerRef PM)) \
623    macro(void, AddScalarReplAggregatesPassSSA, (LLVMPassManagerRef PM)) \
624    macro(void, AddScalarReplAggregatesPassWithThreshold, (LLVMPassManagerRef PM, int Threshold)) \
625    macro(void, AddSimplifyLibCallsPass, (LLVMPassManagerRef PM)) \
626    macro(void, AddTailCallEliminationPass, (LLVMPassManagerRef PM)) \
627    macro(void, AddConstantPropagationPass, (LLVMPassManagerRef PM)) \
628    macro(void, AddDemoteMemoryToRegisterPass, (LLVMPassManagerRef PM)) \
629    macro(void, AddVerifierPass, (LLVMPassManagerRef PM)) \
630    macro(void, AddCorrelatedValuePropagationPass, (LLVMPassManagerRef PM)) \
631    macro(void, AddEarlyCSEPass, (LLVMPassManagerRef PM)) \
632    macro(void, AddLowerExpectIntrinsicPass, (LLVMPassManagerRef PM)) \
633    macro(void, AddTypeBasedAliasAnalysisPass, (LLVMPassManagerRef PM)) \
634    macro(void, AddBasicAliasAnalysisPass, (LLVMPassManagerRef PM))
635
636#endif // LLVMAPIFunctions_h
637
638