1 module llvm.functions.link;
2 
3 import std.array : array;
4 import std.algorithm.iteration : map, joiner;
5 import std.range : chain;
6 
7 import llvm.config;
8 import llvm.types;
9 import core.stdc.stdint;
10 
11 private nothrow auto orEmpty(T)(T v)
12 {
13     return v? v : "";
14 }
15 
16 __gshared extern(System) nothrow:
17 
18 /+ Analysis +/
19 
20 LLVMBool LLVMVerifyModule(LLVMModuleRef M, LLVMVerifierFailureAction Action, char** OutMessage);
21 LLVMBool LLVMVerifyFunction(LLVMValueRef Fn, LLVMVerifierFailureAction Action);
22 void LLVMViewFunctionCFG(LLVMValueRef Fn);
23 void LLVMViewFunctionCFGOnly(LLVMValueRef Fn);
24 
25 /+ Bit Reader +/
26 
27 static if (LLVM_Version < asVersion(3, 9, 0)) {
28     LLVMBool LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, LLVMModuleRef* OutModule, char** OutMessage);
29 }
30 
31 static if (LLVM_Version >= asVersion(3, 8, 0)) {
32     LLVMBool LLVMParseBitcode2(LLVMMemoryBufferRef MemBuf, LLVMModuleRef* OutModule);
33 }
34 
35 static if (LLVM_Version < asVersion(3, 9, 0)) {
36     LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleRef* OutModule, char** OutMessage);
37 }
38 
39 static if (LLVM_Version >= asVersion(3, 8, 0)) {
40     LLVMBool LLVMParseBitcodeInContext2(LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleRef* OutModule);
41 }
42 
43 static if (LLVM_Version < asVersion(3, 9, 0)) {
44     LLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleRef* OutM, char** OutMessage);
45 }
46 
47 static if (LLVM_Version >= asVersion(3, 8, 0)) {
48     LLVMBool LLVMGetBitcodeModuleInContext2(LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleRef* OutM);
49 }
50 
51 static if (LLVM_Version < asVersion(3, 9, 0)) {
52     LLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, LLVMModuleRef* OutM, char** OutMessage);
53 }
54 
55 static if (LLVM_Version >= asVersion(3, 8, 0)) {
56     LLVMBool LLVMGetBitcodeModule2(LLVMMemoryBufferRef MemBuf, LLVMModuleRef* OutM);
57 }
58 
59 static if (LLVM_Version < asVersion(3, 8, 0)) {
60     LLVMBool LLVMGetBitcodeModuleProviderInContext(LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleProviderRef* OutMP, char** OutMessage);
61 }
62 
63 static if (LLVM_Version < asVersion(3, 8, 0)) {
64     LLVMBool LLVMGetBitcodeModuleProvider(LLVMMemoryBufferRef MemBuf, LLVMModuleProviderRef* OutMP, char** OutMessage);
65 }
66 
67 /+ Bit Writer +/
68 
69 int LLVMWriteBitcodeToFile(LLVMModuleRef M, const(char)* Path);
70 int LLVMWriteBitcodeToFD(LLVMModuleRef M, int FD, int ShouldClose, int Unbuffered);
71 int LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int Handle);
72 static if (LLVM_Version >= asVersion(3, 6, 0)) {
73     LLVMMemoryBufferRef LLVMWriteBitcodeToMemoryBuffer(LLVMModuleRef M);
74 }
75 
76 /+ Transforms +/
77 
78 /++ Interprocedural transformations ++/
79 
80 void LLVMAddArgumentPromotionPass(LLVMPassManagerRef PM);
81 void LLVMAddConstantMergePass(LLVMPassManagerRef PM);
82 static if (LLVM_Version >= asVersion(6, 0, 0)) {
83 	void LLVMAddCalledValuePropagationPass(LLVMPassManagerRef PM);
84 }
85 void LLVMAddDeadArgEliminationPass(LLVMPassManagerRef PM);
86 void LLVMAddFunctionAttrsPass(LLVMPassManagerRef PM);
87 void LLVMAddFunctionInliningPass(LLVMPassManagerRef PM);
88 void LLVMAddAlwaysInlinerPass(LLVMPassManagerRef PM);
89 void LLVMAddGlobalDCEPass(LLVMPassManagerRef PM);
90 void LLVMAddGlobalOptimizerPass(LLVMPassManagerRef PM);
91 void LLVMAddIPConstantPropagationPass(LLVMPassManagerRef PM);
92 void LLVMAddPruneEHPass(LLVMPassManagerRef PM);
93 void LLVMAddIPSCCPPass(LLVMPassManagerRef PM);
94 void LLVMAddInternalizePass(LLVMPassManagerRef, uint AllButMain);
95 void LLVMAddStripDeadPrototypesPass(LLVMPassManagerRef PM);
96 void LLVMAddStripSymbolsPass(LLVMPassManagerRef PM);
97 
98 /++ Pass manager builder ++/
99 
100 LLVMPassManagerBuilderRef LLVMPassManagerBuilderCreate();
101 void LLVMPassManagerBuilderDispose(LLVMPassManagerBuilderRef PMB);
102 void LLVMPassManagerBuilderSetOptLevel(LLVMPassManagerBuilderRef PMB, uint OptLevel);
103 void LLVMPassManagerBuilderSetSizeLevel(LLVMPassManagerBuilderRef PMB, uint SizeLevel);
104 void LLVMPassManagerBuilderSetDisableUnitAtATime(LLVMPassManagerBuilderRef PMB, LLVMBool Value);
105 void LLVMPassManagerBuilderSetDisableUnrollLoops(LLVMPassManagerBuilderRef PMB, LLVMBool Value);
106 void LLVMPassManagerBuilderSetDisableSimplifyLibCalls(LLVMPassManagerBuilderRef PMB, LLVMBool Value);
107 void LLVMPassManagerBuilderUseInlinerWithThreshold(LLVMPassManagerBuilderRef PMB, uint Threshold);
108 void LLVMPassManagerBuilderPopulateFunctionPassManager(LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM);
109 void LLVMPassManagerBuilderPopulateModulePassManager(LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM);
110 void LLVMPassManagerBuilderPopulateLTOPassManager(LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM, LLVMBool Internalize, LLVMBool RunInliner);
111 
112 /++ Scalar transformations ++/
113 
114 void LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM);
115 static if (LLVM_Version >= asVersion(3, 7, 0)) {
116     void LLVMAddBitTrackingDCEPass(LLVMPassManagerRef PM);
117 }
118 static if (LLVM_Version >= asVersion(3, 6, 0)) {
119     void LLVMAddAlignmentFromAssumptionsPass(LLVMPassManagerRef PM);
120 }
121 void LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM);
122 static if (LLVM_Version >= asVersion(5, 0, 0) && LLVM_Version < asVersion(6, 0, 0)) {
123 	void LLVMAddLateCFGSimplificationPass(LLVMPassManagerRef PM);
124 }
125 void LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM);
126 static if (LLVM_Version >= asVersion(3, 5, 0)) {
127     void LLVMAddScalarizerPass(LLVMPassManagerRef PM);
128 }
129 static if (LLVM_Version >= asVersion(3, 5, 0)) {
130     void LLVMAddMergedLoadStoreMotionPass(LLVMPassManagerRef PM);
131 }
132 void LLVMAddGVNPass(LLVMPassManagerRef PM);
133 static if (LLVM_Version >= asVersion(4, 0, 0)) {
134 	void LLVMAddNewGVNPass(LLVMPassManagerRef PM);
135 }
136 void LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM);
137 void LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM);
138 void LLVMAddJumpThreadingPass(LLVMPassManagerRef PM);
139 void LLVMAddLICMPass(LLVMPassManagerRef PM);
140 void LLVMAddLoopDeletionPass(LLVMPassManagerRef PM);
141 void LLVMAddLoopIdiomPass(LLVMPassManagerRef PM);
142 void LLVMAddLoopRotatePass(LLVMPassManagerRef PM);
143 static if (LLVM_Version >= asVersion(3, 4, 0)) {
144     void LLVMAddLoopRerollPass(LLVMPassManagerRef PM);
145 }
146 void LLVMAddLoopUnrollPass(LLVMPassManagerRef PM);
147 void LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM);
148 void LLVMAddMemCpyOptPass(LLVMPassManagerRef PM);
149 static if (LLVM_Version >= asVersion(3, 4, 0)) {
150     void LLVMAddPartiallyInlineLibCallsPass(LLVMPassManagerRef PM);
151 }
152 static if (LLVM_Version >= asVersion(3, 6, 0)) {
153     void LLVMAddLowerSwitchPass(LLVMPassManagerRef PM);
154 }
155 void LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM);
156 void LLVMAddReassociatePass(LLVMPassManagerRef PM);
157 void LLVMAddSCCPPass(LLVMPassManagerRef PM);
158 void LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM);
159 void LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM);
160 void LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM, int Threshold);
161 void LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM);
162 void LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM);
163 void LLVMAddConstantPropagationPass(LLVMPassManagerRef PM);
164 void LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM);
165 void LLVMAddVerifierPass(LLVMPassManagerRef PM);
166 void LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM);
167 void LLVMAddEarlyCSEPass(LLVMPassManagerRef PM);
168 static if (LLVM_Version >= asVersion(4, 0, 0)) {
169 	void LLVMAddEarlyCSEMemSSAPass(LLVMPassManagerRef PM);
170 }
171 void LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM);
172 void LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM);
173 static if (LLVM_Version >= asVersion(3, 6, 0)) {
174     void LLVMAddScopedNoAliasAAPass(LLVMPassManagerRef PM);
175 }
176 void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM);
177 
178 /++ Vectorization transformations ++/
179 
180 static if (LLVM_Version < asVersion(7, 0, 0)) {
181 	void LLVMAddBBVectorizePass(LLVMPassManagerRef PM);
182 }
183 static if (LLVM_Version >= asVersion(3, 2, 0)) {
184     void LLVMAddLoopVectorizePass(LLVMPassManagerRef PM);
185 }
186 
187 /+ Core +/
188 
189 static if (LLVM_Version >= asVersion(3, 3, 0)) {
190     void LLVMShutdown();
191 }
192 static if (LLVM_Version >= asVersion(3, 4, 0)) {
193     char* LLVMCreateMessage(const(char)* Message);
194 }
195 void LLVMDisposeMessage(char* Message);
196 static if (LLVM_Version >= asVersion(3, 4, 0)) {
197     void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler);
198 }
199 static if (LLVM_Version >= asVersion(3, 4, 0)) {
200     void LLVMResetFatalErrorHandler();
201 }
202 static if (LLVM_Version >= asVersion(3, 4, 0)) {
203     void LLVMEnablePrettyStackTrace();
204 }
205 
206 /++ Contexts ++/
207 
208 LLVMContextRef LLVMContextCreate();
209 LLVMContextRef LLVMGetGlobalContext();
210 void LLVMContextDispose(LLVMContextRef C);
211 uint LLVMGetMDKindIDInContext(LLVMContextRef C, const(char)* Name, uint SLen);
212 uint LLVMGetMDKindID(const(char)* Name, uint SLen);
213 
214 
215 static if (LLVM_Version >= asVersion(3, 9, 0)) {
216     uint LLVMGetEnumAttributeKindForName(const(char)*Name, size_t SLen);
217 }
218 static if (LLVM_Version >= asVersion(3, 9, 0)) {
219     uint LLVMGetLastEnumAttributeKind();
220 }
221 static if (LLVM_Version >= asVersion(3, 9, 0)) {
222     LLVMAttributeRef LLVMCreateEnumAttribute(LLVMContextRef C, uint KindID, ulong Val);
223 }
224 static if (LLVM_Version >= asVersion(3, 9, 0)) {
225     uint LLVMGetEnumAttributeKind(LLVMAttributeRef A);
226 }
227 static if (LLVM_Version >= asVersion(3, 9, 0)) {
228     ulong LLVMGetEnumAttributeValue(LLVMAttributeRef A);
229 }
230 static if (LLVM_Version >= asVersion(3, 9, 0)) {
231     LLVMAttributeRef LLVMCreateStringAttribute(LLVMContextRef C, const(char)*K, uint KLength, const(char)*V, uint VLength);
232 }
233 static if (LLVM_Version >= asVersion(3, 9, 0)) {
234     const(char)* LLVMGetStringAttributeKind(LLVMAttributeRef A, uint *Length);
235 }
236 static if (LLVM_Version >= asVersion(3, 9, 0)) {
237     const(char)* LLVMGetStringAttributeValue(LLVMAttributeRef A, uint *Length);
238 }
239 static if (LLVM_Version >= asVersion(3, 9, 0)) {
240     LLVMBool LLVMIsEnumAttribute(LLVMAttributeRef A);
241 }
242 static if (LLVM_Version >= asVersion(3, 9, 0)) {
243     LLVMBool LLVMIsStringAttribute(LLVMAttributeRef A);
244 }
245 
246 static if (LLVM_Version >= asVersion(3, 5, 0)) {
247     void LLVMContextSetDiagnosticHandler (LLVMContextRef C, LLVMDiagnosticHandler Handler, void *DiagnosticContext);
248 }
249 
250 static if (LLVM_Version >= asVersion(3, 9, 0)) {
251     LLVMDiagnosticHandler LLVMContextGetDiagnosticHandler(LLVMContextRef C);
252 }
253 static if (LLVM_Version >= asVersion(3, 9, 0)) {
254     void* LLVMContextGetDiagnosticContext(LLVMContextRef C);
255 }
256 
257 static if (LLVM_Version >= asVersion(3, 5, 0)) {
258     char* LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI);
259 }
260 
261 static if (LLVM_Version >= asVersion(3, 5, 0)) {
262     LLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI);
263 }
264 static if (LLVM_Version >= asVersion(3, 5, 0)) {
265     void LLVMContextSetYieldCallback(LLVMContextRef C, LLVMYieldCallback Callback, void *OpaqueHandle);
266 }
267 
268 /++ Modules ++/
269 
270 LLVMModuleRef LLVMModuleCreateWithName(const(char)* ModuleID);
271 LLVMModuleRef LLVMModuleCreateWithNameInContext(const(char)* ModuleID, LLVMContextRef C);
272 static if (LLVM_Version >= asVersion(3, 6, 0)) {
273     LLVMModuleRef LLVMCloneModule(LLVMModuleRef M);
274 }
275 void LLVMDisposeModule(LLVMModuleRef M);
276 
277 static if (LLVM_Version >= asVersion(3, 9, 0)) {
278     const(char)* LLVMGetModuleIdentifier(LLVMModuleRef M, size_t *Len);
279 }
280 static if (LLVM_Version >= asVersion(3, 9, 0)) {
281     void LLVMSetModuleIdentifier(LLVMModuleRef M, const(char)* Ident, size_t Len);
282 }
283 
284 const(char)* LLVMGetDataLayout(LLVMModuleRef M);
285 
286 static if (LLVM_Version >= asVersion(3, 9, 0)) {
287     const(char)* LLVMGetDataLayoutStr(LLVMModuleRef M);
288 }
289 
290 void LLVMSetDataLayout(LLVMModuleRef M, const(char)* Triple);
291 const(char)* LLVMGetTarget(LLVMModuleRef M);
292 void LLVMSetTarget(LLVMModuleRef M, const(char)* Triple);
293 void LLVMDumpModule(LLVMModuleRef M);
294 static if (LLVM_Version >= asVersion(3, 2, 0)) {
295     LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const(char)* Filename, char** ErrorMessage);
296 }
297 static if (LLVM_Version >= asVersion(3, 4, 0)) {
298     char* LLVMPrintModuleToString(LLVMModuleRef M);
299 }
300 
301 static if (LLVM_Version >= asVersion(7, 0, 0)) {
302 	void LLVMSetModuleInlineAsm2(LLVMModuleRef M, const(char)* Asm, size_t Len);
303 }
304 
305 static if (LLVM_Version >= asVersion(7, 0, 0)) {
306 	deprecated("Use LLVMSetModuleInlineAsm2 instead.") void LLVMSetModuleInlineAsm(LLVMModuleRef M, const(char)* Asm);
307 } else {
308 	void LLVMSetModuleInlineAsm(LLVMModuleRef M, const(char)* Asm);
309 }
310 
311 LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
312 LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const(char)* Name);
313 uint LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const(char)* name);
314 void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const(char)* name, LLVMValueRef *Dest);
315 void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const(char)* name, LLVMValueRef Val);
316 LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const(char)* Name, LLVMTypeRef FunctionTy);
317 LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const(char)* Name);
318 LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
319 LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
320 LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
321 LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
322 
323 /++ Types ++/
324 
325 LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
326 LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
327 LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
328 static if (LLVM_Version >= asVersion(3, 4, 0)) {
329     void LLVMDumpType(LLVMTypeRef Val);
330 }
331 static if (LLVM_Version >= asVersion(3, 4, 0)) {
332     char* LLVMPrintTypeToString(LLVMTypeRef Val);
333 }
334 
335 /+++ Integer Types +++/
336 
337 LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
338 LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
339 LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
340 LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
341 LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
342 static if (LLVM_Version >= asVersion(3, 8, 0)) {
343     LLVMTypeRef LLVMInt128TypeInContext(LLVMContextRef C);
344 }
345 LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, uint NumBits);
346 LLVMTypeRef LLVMInt1Type();
347 LLVMTypeRef LLVMInt8Type();
348 LLVMTypeRef LLVMInt16Type();
349 LLVMTypeRef LLVMInt32Type();
350 LLVMTypeRef LLVMInt64Type();
351 static if (LLVM_Version >= asVersion(3, 8, 0)) {
352     LLVMTypeRef LLVMInt128Type();
353 }
354 LLVMTypeRef LLVMIntType(uint NumBits);
355 uint LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
356 
357 /+++ Floating Point Types +++/
358 
359 LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C);
360 LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
361 LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
362 LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
363 LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
364 LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
365 LLVMTypeRef LLVMHalfType();
366 LLVMTypeRef LLVMFloatType();
367 LLVMTypeRef LLVMDoubleType();
368 LLVMTypeRef LLVMX86FP80Type();
369 LLVMTypeRef LLVMFP128Type();
370 LLVMTypeRef LLVMPPCFP128Type();
371 
372 /+++ Function Types +++/
373 
374 LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType, LLVMTypeRef* ParamTypes, uint ParamCount, LLVMBool IsVarArg);
375 LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
376 LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
377 uint LLVMCountParamTypes(LLVMTypeRef FunctionTy);
378 void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef* Dest);
379 
380 /+++ Structure Types +++/
381 
382 LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef* ElementTypes, uint ElementCount, LLVMBool Packed);
383 LLVMTypeRef LLVMStructType(LLVMTypeRef* ElementTypes, uint ElementCount, LLVMBool Packed);
384 LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const(char)* Name);
385 const(char)* LLVMGetStructName(LLVMTypeRef Ty);
386 void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef* ElementTypes, uint ElementCount, LLVMBool Packed);
387 uint LLVMCountStructElementTypes(LLVMTypeRef StructTy);
388 void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef* Dest);
389 static if (LLVM_Version >= asVersion(3, 7, 0)) {
390     LLVMTypeRef LLVMStructGetTypeAtIndex(LLVMTypeRef StructTy, uint i);
391 }
392 LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
393 LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
394 
395 /+++ Sequential Types +++/
396 
397 LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
398 static if (LLVM_Version >= asVersion(5,0,0)) {
399 	void LLVMGetSubtypes(LLVMTypeRef Tp, LLVMTypeRef* Arr);
400 }
401 static if (LLVM_Version >= asVersion(5,0,0)) {
402 	uint LLVMGetNumContainedTypes(LLVMTypeRef Tp);
403 }
404 LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, uint ElementCount);
405 uint LLVMGetArrayLength(LLVMTypeRef ArrayTy);
406 LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, uint AddressSpace);
407 uint LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
408 LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, uint ElementCount);
409 uint LLVMGetVectorSize(LLVMTypeRef VectorTy);
410 
411 /+++ Other Types +++/
412 
413 LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
414 LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
415 LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
416 static if (LLVM_Version >= asVersion(6, 0, 0)) {
417 	LLVMTypeRef LLVMTokenTypeInContext(LLVMContextRef C);
418 }
419 static if (LLVM_Version >= asVersion(6, 0, 0)) {
420 	LLVMTypeRef LLVMMetadataTypeInContext(LLVMContextRef C);
421 }
422 LLVMTypeRef LLVMVoidType();
423 LLVMTypeRef LLVMLabelType();
424 LLVMTypeRef LLVMX86MMXType();
425 
426 /++ Values ++/
427 
428 /+++ General APIs +++/
429 
430 LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
431 static if (LLVM_Version >= asVersion(3, 9, 0)) {
432     LLVMValueKind LLVMGetValueKind(LLVMValueRef Val);
433 }
434 
435 static if (LLVM_Version >= asVersion(7, 0, 0)) {
436 	const(char)* LLVMGetValueName2(LLVMValueRef Val, size_t* Length);
437 }
438 
439 static if (LLVM_Version >= asVersion(7, 0, 0)) {
440 	deprecated("Use LLVMGetValueName2 instead.") const(char)* LLVMGetValueName(LLVMValueRef Val);
441 } else {
442 	const(char)* LLVMGetValueName(LLVMValueRef Val);
443 }
444 
445 static if (LLVM_Version >= asVersion(7, 0, 0)) {
446 	void LLVMSetValueName2(LLVMValueRef Val, const(char*) Name, size_t NameLen);
447 }
448 
449 static if (LLVM_Version >= asVersion(7, 0, 0)) {
450 	deprecated("Use LLVMSetValueName2 instead.")void LLVMSetValueName(LLVMValueRef Val, const(char)* Name);
451 } else {
452 	void LLVMSetValueName(LLVMValueRef Val, const(char)* Name);
453 }
454 
455 void LLVMDumpValue(LLVMValueRef Val);
456 static if (LLVM_Version >= asVersion(3, 4, 0)) {
457     char* LLVMPrintValueToString(LLVMValueRef Val);
458 }
459 void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
460 LLVMBool LLVMIsConstant(LLVMValueRef Val);
461 LLVMBool LLVMIsUndef(LLVMValueRef Val);
462 
463 LLVMValueRef LLVMIsAAllocaInst(LLVMValueRef Val);
464 LLVMValueRef LLVMIsAArgument(LLVMValueRef Val);
465 LLVMValueRef LLVMIsABasicBlock(LLVMValueRef Val);
466 LLVMValueRef LLVMIsABinaryOperator(LLVMValueRef Val);
467 LLVMValueRef LLVMIsABitCastInst(LLVMValueRef Val);
468 LLVMValueRef LLVMIsABlockAddress(LLVMValueRef Val);
469 LLVMValueRef LLVMIsABranchInst(LLVMValueRef Val);
470 LLVMValueRef LLVMIsACallInst(LLVMValueRef Val);
471 LLVMValueRef LLVMIsACastInst(LLVMValueRef Val);
472 static if (LLVM_Version >= asVersion(3, 4, 0)) {
473     LLVMValueRef LLVMIsAAddrSpaceCastInst(LLVMValueRef Val);
474 }
475 LLVMValueRef LLVMIsACmpInst(LLVMValueRef Val);
476 LLVMValueRef LLVMIsAConstantAggregateZero(LLVMValueRef Val);
477 LLVMValueRef LLVMIsAConstantArray(LLVMValueRef Val);
478 static if (LLVM_Version >= asVersion(3, 4, 0)) {
479     LLVMValueRef LLVMIsAConstantDataSequential(LLVMValueRef Val);
480 }
481 static if (LLVM_Version >= asVersion(3, 4, 0)) {
482     LLVMValueRef LLVMIsAConstantDataArray(LLVMValueRef Val);
483 }
484 static if (LLVM_Version >= asVersion(3, 4, 0)) {
485     LLVMValueRef LLVMIsAConstantDataVector(LLVMValueRef Val);
486 }
487 
488 LLVMValueRef LLVMIsAConstantExpr(LLVMValueRef Val);
489 LLVMValueRef LLVMIsAConstantFP(LLVMValueRef Val);
490 LLVMValueRef LLVMIsAConstantInt(LLVMValueRef Val);
491 LLVMValueRef LLVMIsAConstant(LLVMValueRef Val);
492 LLVMValueRef LLVMIsAConstantPointerNull(LLVMValueRef Val);
493 LLVMValueRef LLVMIsAConstantStruct(LLVMValueRef Val);
494 static if (LLVM_Version >= asVersion(3, 8, 0)) {
495     LLVMValueRef LLVMIsAConstantTokenNone(LLVMValueRef Val);
496 }
497 LLVMValueRef LLVMIsAConstantVector(LLVMValueRef Val);
498 LLVMValueRef LLVMIsADbgDeclareInst(LLVMValueRef Val);
499 LLVMValueRef LLVMIsADbgInfoIntrinsic(LLVMValueRef Val);
500 LLVMValueRef LLVMIsAExtractElementInst(LLVMValueRef Val);
501 LLVMValueRef LLVMIsAExtractValueInst(LLVMValueRef Val);
502 LLVMValueRef LLVMIsAFCmpInst(LLVMValueRef Val);
503 LLVMValueRef LLVMIsAFPExtInst(LLVMValueRef Val);
504 LLVMValueRef LLVMIsAFPToSIInst(LLVMValueRef Val);
505 LLVMValueRef LLVMIsAFPToUIInst(LLVMValueRef Val);
506 LLVMValueRef LLVMIsAFPTruncInst(LLVMValueRef Val);
507 LLVMValueRef LLVMIsAGetElementPtrInst(LLVMValueRef Val);
508 LLVMValueRef LLVMIsAGlobalValue(LLVMValueRef Val);
509 LLVMValueRef LLVMIsAGlobalAlias(LLVMValueRef Val);
510 LLVMValueRef LLVMIsAGlobalObject(LLVMValueRef Val);
511 LLVMValueRef LLVMIsAFunction(LLVMValueRef Val);
512 LLVMValueRef LLVMIsAGlobalVariable(LLVMValueRef Val);
513 LLVMValueRef LLVMIsAICmpInst(LLVMValueRef Val);
514 LLVMValueRef LLVMIsAIndirectBrInst(LLVMValueRef Val);
515 LLVMValueRef LLVMIsAInlineAsm(LLVMValueRef Val);
516 LLVMValueRef LLVMIsAInsertElementInst(LLVMValueRef Val);
517 LLVMValueRef LLVMIsAInsertValueInst(LLVMValueRef Val);
518 LLVMValueRef LLVMIsAInstruction(LLVMValueRef Val);
519 LLVMValueRef LLVMIsAIntrinsicInst(LLVMValueRef Val);
520 LLVMValueRef LLVMIsAIntToPtrInst(LLVMValueRef Val);
521 LLVMValueRef LLVMIsAInvokeInst(LLVMValueRef Val);
522 LLVMValueRef LLVMIsALandingPadInst(LLVMValueRef Val);
523 LLVMValueRef LLVMIsALoadInst(LLVMValueRef Val);
524 LLVMValueRef LLVMIsAMDNode(LLVMValueRef Val);
525 LLVMValueRef LLVMIsAMDString(LLVMValueRef Val);
526 LLVMValueRef LLVMIsAMemCpyInst(LLVMValueRef Val);
527 LLVMValueRef LLVMIsAMemIntrinsic(LLVMValueRef Val);
528 LLVMValueRef LLVMIsAMemMoveInst(LLVMValueRef Val);
529 LLVMValueRef LLVMIsAMemSetInst(LLVMValueRef Val);
530 LLVMValueRef LLVMIsAPHINode(LLVMValueRef Val);
531 LLVMValueRef LLVMIsAPtrToIntInst(LLVMValueRef Val);
532 LLVMValueRef LLVMIsAResumeInst(LLVMValueRef Val);
533 static if (LLVM_Version >= asVersion(3, 8, 0)) {
534     LLVMValueRef LLVMIsACleanupReturnInst(LLVMValueRef Val);
535 }
536 static if (LLVM_Version >= asVersion(3, 8, 0)) {
537     LLVMValueRef LLVMIsACatchReturnInst(LLVMValueRef Val);
538 }
539 static if (LLVM_Version >= asVersion(3, 8, 0)) {
540     LLVMValueRef LLVMIsAFuncletPadInst(LLVMValueRef Val);
541 }
542 static if (LLVM_Version >= asVersion(3, 8, 0)) {
543     LLVMValueRef LLVMIsACatchPadInst(LLVMValueRef Val);
544 }
545 static if (LLVM_Version >= asVersion(3, 8, 0)) {
546     LLVMValueRef LLVMIsACleanupPadInst(LLVMValueRef Val);
547 }
548 LLVMValueRef LLVMIsAReturnInst(LLVMValueRef Val);
549 LLVMValueRef LLVMIsASelectInst(LLVMValueRef Val);
550 LLVMValueRef LLVMIsASExtInst(LLVMValueRef Val);
551 LLVMValueRef LLVMIsAShuffleVectorInst(LLVMValueRef Val);
552 LLVMValueRef LLVMIsASIToFPInst(LLVMValueRef Val);
553 LLVMValueRef LLVMIsAStoreInst(LLVMValueRef Val);
554 LLVMValueRef LLVMIsASwitchInst(LLVMValueRef Val);
555 LLVMValueRef LLVMIsATerminatorInst(LLVMValueRef Val);
556 LLVMValueRef LLVMIsATruncInst(LLVMValueRef Val);
557 LLVMValueRef LLVMIsAUIToFPInst(LLVMValueRef Val);
558 LLVMValueRef LLVMIsAUnaryInstruction(LLVMValueRef Val);
559 LLVMValueRef LLVMIsAUndefValue(LLVMValueRef Val);
560 LLVMValueRef LLVMIsAUnreachableInst(LLVMValueRef Val);
561 LLVMValueRef LLVMIsAUser(LLVMValueRef Val);
562 LLVMValueRef LLVMIsAVAArgInst(LLVMValueRef Val);
563 LLVMValueRef LLVMIsAZExtInst(LLVMValueRef Val);
564 
565 /+++ Usage +++/
566 
567 LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
568 LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
569 LLVMValueRef LLVMGetUser(LLVMUseRef U);
570 LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
571 
572 /+++ User value +++/
573 
574 LLVMValueRef LLVMGetOperand(LLVMValueRef Val, uint Index);
575 static if (LLVM_Version >= asVersion(3, 6, 0)) {
576     LLVMUseRef LLVMGetOperandUse(LLVMValueRef Val, uint Index);
577 }
578 void LLVMSetOperand(LLVMValueRef User, uint Index, LLVMValueRef Val);
579 int LLVMGetNumOperands(LLVMValueRef Val);
580 
581 /+++ Constants +++/
582 
583 LLVMValueRef LLVMConstNull(LLVMTypeRef Ty);
584 LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty);
585 LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
586 LLVMBool LLVMIsNull(LLVMValueRef Val);
587 LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
588 
589 /++++ Scalar constants ++++/
590 
591 LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, ulong N, LLVMBool SignExtend);
592 LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy, uint NumWords, const(ulong)* Words);
593 LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const(char)* Text, ubyte Radix);
594 LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const(char)* Text, uint SLen, ubyte Radix);
595 LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
596 LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const(char)* Text);
597 LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const(char)* Text, uint SLen);
598 ulong LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
599 long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
600 static if (LLVM_Version >= asVersion(3, 6, 0)) {
601     double LLVMConstRealGetDouble(LLVMValueRef ConstantVal, LLVMBool *losesInfo);
602 }
603 
604 /++++ Composite Constants ++++/
605 
606 LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const(char)* Str, uint Length, LLVMBool DontNullTerminate);
607 LLVMValueRef LLVMConstString(const(char)* Str, uint Length, LLVMBool DontNullTerminate);
608 static if (LLVM_Version >= asVersion(3, 6, 0)) {
609     LLVMBool LLVMIsConstantString(LLVMValueRef c);
610 }
611 static if (LLVM_Version >= asVersion(3, 6, 0)) {
612     const(char*) LLVMGetAsString(LLVMValueRef c, size_t* Length);
613 }
614 LLVMValueRef LLVMConstStructInContext(LLVMContextRef C, LLVMValueRef* ConstantVals, uint Count, LLVMBool Packed);
615 LLVMValueRef LLVMConstStruct(LLVMValueRef* ConstantVals, uint Count, LLVMBool Packed);
616 LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy, LLVMValueRef* ConstantVals, uint Length);
617 LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy, LLVMValueRef* ConstantVals, uint Count);
618 static if (LLVM_Version >= asVersion(3, 6, 0)) {
619     LLVMValueRef LLVMGetElementAsConstant(LLVMValueRef c, uint idx);
620 }
621 LLVMValueRef LLVMConstVector(LLVMValueRef* ScalarConstantVals, uint Size);
622 
623 /++++ Constant Expressions ++++/
624 
625 LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
626 LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
627 LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
628 LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
629 LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
630 LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
631 LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
632 LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
633 LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
634 LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
635 LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
636 LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
637 LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
638 LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
639 LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
640 LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
641 LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
642 LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
643 LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
644 LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
645 LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
646 static if (LLVM_Version >= asVersion(4, 0, 0)) {
647 	LLVMValueRef LLVMConstExactUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
648 }
649 LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
650 LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
651 LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
652 LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
653 LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
654 LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
655 LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
656 LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
657 LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
658 LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate, LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
659 LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate, LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
660 LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
661 LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
662 LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
663 LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal, LLVMValueRef* ConstantIndices, uint NumIndices);
664 LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal, LLVMValueRef* ConstantIndices, uint NumIndices);
665 LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
666 LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
667 LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
668 LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
669 LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
670 LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
671 LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
672 LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
673 LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
674 LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
675 LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
676 LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
677 static if (LLVM_Version >= asVersion(3, 4, 0)) {
678     LLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
679 }
680 LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
681 LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
682 LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
683 LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
684 LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType, LLVMBool isSigned);
685 LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
686 LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition, LLVMValueRef ConstantIfTrue, LLVMValueRef ConstantIfFalse);
687 LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant, LLVMValueRef IndexConstant);
688 LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant, LLVMValueRef ElementValueConstant, LLVMValueRef IndexConstant);
689 LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant, LLVMValueRef VectorBConstant, LLVMValueRef MaskConstant);
690 LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, uint* IdxList, uint NumIdx);
691 LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant, LLVMValueRef ElementValueConstant, uint* IdxList, uint NumIdx);
692 
693 static if (LLVM_Version >= asVersion(7, 0, 0)) {
694 	LLVMValueRef LLVMGetInlineAsm(LLVMTypeRef Ty,  char *AsmString, size_t AsmStringSize, char* Constraints, size_t ConstraintsSize, LLVMBool HasSideEffects, LLVMBool IsAlignStack, LLVMInlineAsmDialect Dialect);
695 }
696 
697 static if (LLVM_Version >= asVersion(7, 0, 0)) {
698 	deprecated("Use LLVMGetInlineAsm instead.") LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty, const(char)* AsmString, const(char)* Constraints, LLVMBool HasSideEffects, LLVMBool IsAlignStack);
699 } else {
700 	LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty, const(char)* AsmString, const(char)* Constraints, LLVMBool HasSideEffects, LLVMBool IsAlignStack);
701 }
702 
703 LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
704 
705 /++++ Global Values ++++/
706 
707 LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
708 LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
709 LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
710 void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
711 const(char)* LLVMGetSection(LLVMValueRef Global);
712 void LLVMSetSection(LLVMValueRef Global, const(char)* Section);
713 LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
714 void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
715 static if (LLVM_Version >= asVersion(3, 5, 0)) {
716     LLVMDLLStorageClass LLVMGetDLLStorageClass(LLVMValueRef Global);
717 }
718 static if (LLVM_Version >= asVersion(3, 5, 0)) {
719     void LLVMSetDLLStorageClass(LLVMValueRef Global, LLVMDLLStorageClass Class);
720 }
721 
722 static if (LLVM_Version >= asVersion(7, 0, 0)) {
723 	LLVMUnnamedAddr LLVMGetUnnamedAddress(LLVMValueRef Global);
724 }
725 
726 static if (LLVM_Version >= asVersion(7, 0, 0)) {
727 	deprecated("Use LLVMGetUnnamedAddress instead.") LLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global);
728 } else static if (LLVM_Version >= asVersion(3, 5, 0)) {
729     LLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global);
730 }
731 
732 static if (LLVM_Version >= asVersion(7, 0, 0)) {
733 	void LLVMSetUnnamedAddress(LLVMValueRef Global, LLVMUnnamedAddr UnnamedAddr);
734 }
735 
736 static if (LLVM_Version >= asVersion(7, 0, 0)) {
737 	deprecated("Use LLVMSetUnnamedAddress instead.") void LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr);
738 } else static if (LLVM_Version >= asVersion(3, 5, 0)) {
739     void LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr);
740 }
741 uint LLVMGetAlignment(LLVMValueRef Global);
742 void LLVMSetAlignment(LLVMValueRef Global, uint Bytes);
743 
744 /+++++ Global Variables +++++/
745 
746 LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const(char)* Name);
747 LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty, const(char)* Name, uint AddressSpace);
748 LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const(char)* Name);
749 LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
750 LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
751 LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
752 LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
753 void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
754 LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
755 void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
756 LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
757 void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
758 LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
759 void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
760 static if (LLVM_Version >= asVersion(3, 3, 0)) {
761     LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar);
762 }
763 static if (LLVM_Version >= asVersion(3, 3, 0)) {
764     void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode);
765 }
766 static if (LLVM_Version >= asVersion(3, 3, 0)) {
767     LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar);
768 }
769 static if (LLVM_Version >= asVersion(3, 3, 0)) {
770     void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit);
771 }
772 
773 /+++++ Global Aliases +++++/
774 
775 LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee, const(char)* Name);
776 
777 /+++++ Function values +++++/
778 
779 void LLVMDeleteFunction(LLVMValueRef Fn);
780 static if (LLVM_Version >= asVersion(3, 9, 0)) {
781     LLVMBool LLVMHasPersonalityFn(LLVMValueRef Fn);
782 }
783 static if (LLVM_Version >= asVersion(3, 7, 0)) {
784     LLVMValueRef LLVMGetPersonalityFn(LLVMValueRef Fn);
785 }
786 static if (LLVM_Version >= asVersion(3, 7, 0)) {
787     void LLVMSetPersonalityFn(LLVMValueRef Fn, LLVMValueRef PersonalityFn);
788 }
789 uint LLVMGetIntrinsicID(LLVMValueRef Fn);
790 uint LLVMGetFunctionCallConv(LLVMValueRef Fn);
791 void LLVMSetFunctionCallConv(LLVMValueRef Fn, uint CC);
792 const(char)* LLVMGetGC(LLVMValueRef Fn);
793 void LLVMSetGC(LLVMValueRef Fn, const(char)* Name);
794 static if (LLVM_Version < asVersion(4, 0, 0)) {
795 	void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
796 }
797 
798 static if (LLVM_Version >= asVersion(3, 9, 0)) {
799     void LLVMAddAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, LLVMAttributeRef A);
800 }
801 static if (LLVM_Version >= asVersion(3, 9, 0)) {
802     uint LLVMGetAttributeCountAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx);
803 }
804 static if (LLVM_Version >= asVersion(3, 9, 0)) {
805     void LLVMGetAttributesAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, LLVMAttributeRef *Attrs);
806 }
807 static if (LLVM_Version >= asVersion(3, 9, 0)) {
808     LLVMAttributeRef LLVMGetEnumAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, uint KindID);
809 }
810 static if (LLVM_Version >= asVersion(3, 9, 0)) {
811     LLVMAttributeRef LLVMGetStringAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, const(char)* K, uint KLen);
812 }
813 static if (LLVM_Version >= asVersion(3, 9, 0)) {
814     void LLVMRemoveEnumAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, uint KindID);
815 }
816 static if (LLVM_Version >= asVersion(3, 9, 0)) {
817     void LLVMRemoveStringAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, const(char)* K, uint KLen);
818 }
819 
820 
821 
822 static if (LLVM_Version >= asVersion(3, 3, 0)) {
823     void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const(char)* A, const(char)* V);
824 }
825 
826 static if (LLVM_Version < asVersion(4, 0, 0)) {
827 	LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
828 	void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
829 }
830 /++++++ Function Parameters ++++++/
831 
832 uint LLVMCountParams(LLVMValueRef Fn);
833 void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef* Params);
834 LLVMValueRef LLVMGetParam(LLVMValueRef Fn, uint Index);
835 LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
836 LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
837 LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
838 LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
839 LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
840 
841 static if (LLVM_Version < asVersion(4, 0, 0)) {
842 	void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
843 	void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
844 	LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
845 }
846 
847 void LLVMSetParamAlignment(LLVMValueRef Arg, uint Align);
848 
849 /+++ Metadata +++/
850 
851 LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const(char)* Str, uint SLen);
852 LLVMValueRef LLVMMDString(const(char)* Str, uint SLen);
853 LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef* Vals, uint Count);
854 LLVMValueRef LLVMMDNode(LLVMValueRef* Vals, uint Count);
855 static if (LLVM_Version >= asVersion(5, 0, 0)) {
856 	LLVMValueRef LLVMMetadataAsValue(LLVMContextRef C, LLVMMetadataRef MD);
857 	LLVMMetadataRef LLVMValueAsMetadata(LLVMValueRef Val);
858 }
859 const(char)* LLVMGetMDString(LLVMValueRef V, uint* Len);
860 static if (LLVM_Version >= asVersion(3, 2, 0)) {
861     uint LLVMGetMDNodeNumOperands(LLVMValueRef V);
862 }
863 static if (LLVM_Version >= asVersion(3, 2, 0)) {
864     void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest);
865 }
866 
867 /+++ Basic Block +++/
868 
869 LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
870 LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
871 LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
872 static if (LLVM_Version >= asVersion(3, 9, 0)) {
873     const(char)* LLVMGetBasicBlockName(LLVMBasicBlockRef BB);
874 }
875 LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
876 LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
877 uint LLVMCountBasicBlocks(LLVMValueRef Fn);
878 void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef* BasicBlocks);
879 LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
880 LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
881 LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
882 LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
883 LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
884 LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C, LLVMValueRef Fn, const(char)* Name);
885 LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const(char)* Name);
886 LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C, LLVMBasicBlockRef BB, const(char)* Name);
887 LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB, const(char)* Name);
888 void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
889 void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
890 void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
891 void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
892 LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
893 LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
894 
895 /+++ Instructions +++/
896 
897 int LLVMHasMetadata(LLVMValueRef Val);
898 LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, uint KindID);
899 void LLVMSetMetadata(LLVMValueRef Val, uint KindID, LLVMValueRef Node);
900 LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
901 LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
902 LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
903 static if (LLVM_Version >= asVersion(3, 9, 0)) {
904     void LLVMInstructionRemoveFromParent(LLVMValueRef Inst);
905 }
906 void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
907 LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst);
908 LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
909 static if (LLVM_Version >= asVersion(3, 6, 0)) {
910     LLVMRealPredicate LLVMGetFCmpPredicate(LLVMValueRef Inst);
911 }
912 static if (LLVM_Version >= asVersion(3, 6, 0)) {
913     LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst);
914 }
915 LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
916 
917 
918 static if (LLVM_Version >= asVersion(3, 9, 0)) {
919     LLVMTypeRef LLVMGetAllocatedType(LLVMValueRef Alloca);
920 }
921 static if (LLVM_Version >= asVersion(3, 9, 0)) {
922     LLVMBool LLVMIsInBounds(LLVMValueRef GEP);
923 }
924 static if (LLVM_Version >= asVersion(3, 9, 0)) {
925     void LLVMSetIsInBounds(LLVMValueRef GEP, LLVMBool InBounds);
926 }
927 
928 /++++ Call Sites and Invocations ++++/
929 
930 static if (LLVM_Version >= asVersion(3, 9, 0)) {
931     uint LLVMGetNumArgOperands(LLVMValueRef Instr);
932 }
933 void LLVMSetInstructionCallConv(LLVMValueRef Instr, uint CC);
934 uint LLVMGetInstructionCallConv(LLVMValueRef Instr);
935 
936 static if (LLVM_Version < asVersion(4, 0, 0)) {
937 	void LLVMAddInstrAttribute(LLVMValueRef Instr, uint index, LLVMAttribute);
938 	void LLVMRemoveInstrAttribute(LLVMValueRef Instr, uint index, LLVMAttribute);
939 }
940 void LLVMSetInstrParamAlignment(LLVMValueRef Instr, uint index, uint Align);
941 
942 static if (LLVM_Version >= asVersion(3, 9, 0)) {
943     void LLVMAddCallSiteAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, LLVMAttributeRef A);
944 }
945 static if (LLVM_Version >= asVersion(3, 9, 0)) {
946     uint LLVMGetCallSiteAttributeCount(LLVMValueRef C, LLVMAttributeIndex Idx);
947 }
948 static if (LLVM_Version >= asVersion(3, 9, 0)) {
949     void LLVMGetCallSiteAttributes(LLVMValueRef C, LLVMAttributeIndex Idx, LLVMAttributeRef *Attrs);
950 }
951 static if (LLVM_Version >= asVersion(3, 9, 0)) {
952     LLVMAttributeRef LLVMGetCallSiteEnumAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, uint KindID);
953 }
954 static if (LLVM_Version >= asVersion(3, 9, 0)) {
955     LLVMAttributeRef LLVMGetCallSiteStringAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, const(char)* K, uint KLen);
956 }
957 static if (LLVM_Version >= asVersion(3, 9, 0)) {
958     void LLVMRemoveCallSiteEnumAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, uint KindID);
959 }
960 static if (LLVM_Version >= asVersion(3, 9, 0)) {
961     void LLVMRemoveCallSiteStringAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, const(char)* K, uint KLen);
962 }
963 
964 static if (LLVM_Version >= asVersion(3, 9, 0)) {
965     LLVMValueRef LLVMGetCalledValue(LLVMValueRef Instr);
966 }
967 
968 LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
969 
970 static if (LLVM_Version >= asVersion(3, 9, 0)) {
971     LLVMBasicBlockRef LLVMGetNormalDest(LLVMValueRef InvokeInst);
972 }
973 static if (LLVM_Version >= asVersion(3, 9, 0)) {
974     LLVMBasicBlockRef LLVMGetUnwindDest(LLVMValueRef InvokeInst);
975 }
976 static if (LLVM_Version >= asVersion(3, 9, 0)) {
977     void LLVMSetNormalDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B);
978 }
979 static if (LLVM_Version >= asVersion(3, 9, 0)) {
980     void LLVMSetUnwindDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B);
981 }
982 
983 void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
984 static if (LLVM_Version >= asVersion(3, 6, 0)) {
985     uint LLVMGetNumSuccessors(LLVMValueRef Term);
986 }
987 static if (LLVM_Version >= asVersion(3, 6, 0)) {
988     LLVMBasicBlockRef LLVMGetSuccessor(LLVMValueRef Term, uint i);
989 }
990 static if (LLVM_Version >= asVersion(3, 6, 0)) {
991     void LLVMSetSuccessor(LLVMValueRef Term, uint i, LLVMBasicBlockRef block);
992 }
993 static if (LLVM_Version >= asVersion(3, 6, 0)) {
994     LLVMBool LLVMIsConditional(LLVMValueRef Branch);
995 }
996 static if (LLVM_Version >= asVersion(3, 6, 0)) {
997     LLVMValueRef LLVMGetCondition(LLVMValueRef Branch);
998 }
999 static if (LLVM_Version >= asVersion(3, 6, 0)) {
1000     void LLVMSetCondition(LLVMValueRef Branch, LLVMValueRef Cond);
1001 }
1002 
1003 /++++ PHI Nodes ++++/
1004 
1005 void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef* IncomingValues, LLVMBasicBlockRef* IncomingBlocks, uint Count);
1006 uint LLVMCountIncoming(LLVMValueRef PhiNode);
1007 LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, uint Index);
1008 LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, uint Index);
1009 
1010 
1011 
1012 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1013     uint LLVMGetNumIndices(LLVMValueRef Inst);
1014 }
1015 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1016     const(uint)* LLVMGetIndices(LLVMValueRef Inst);
1017 }
1018 
1019 /++ Instruction Builders ++/
1020 
1021 LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
1022 LLVMBuilderRef LLVMCreateBuilder();
1023 void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block, LLVMValueRef Instr);
1024 void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
1025 void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
1026 LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
1027 void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
1028 void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
1029 void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr, const(char)* Name);
1030 void LLVMDisposeBuilder(LLVMBuilderRef Builder);
1031 void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
1032 LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
1033 void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
1034 LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
1035 LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
1036 LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef* RetVals, uint N);
1037 LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
1038 LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If, LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
1039 LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V, LLVMBasicBlockRef Else, uint NumCases);
1040 LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr, uint NumDests);
1041 LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn, LLVMValueRef* Args, uint NumArgs, LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch, const(char)* Name);
1042 static if (LLVM_Version >= asVersion(3, 7, 0)) {
1043 	LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef PersFn, uint NumClauses, const(char)* Name);
1044 } else {
1045 	LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty, uint NumClauses, const(char)* Name);
1046 }
1047 LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
1048 LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
1049 void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal, LLVMBasicBlockRef Dest);
1050 void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
1051 
1052 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1053     uint LLVMGetNumClauses(LLVMValueRef LandingPad);
1054 }
1055 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1056     LLVMValueRef LLVMGetClause(LLVMValueRef LandingPad, uint Idx);
1057 }
1058 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1059     LLVMBool LLVMIsCleanup(LLVMValueRef LandingPad);
1060 }
1061 
1062 void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
1063 void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
1064 LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1065 LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1066 LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1067 LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1068 LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1069 LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1070 LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1071 LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1072 LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1073 LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1074 LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1075 LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1076 LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1077 static if (LLVM_Version >= asVersion(4, 0, 0)) {
1078 	LLVMValueRef LLVMBuildExactUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1079 }
1080 LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1081 LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1082 LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1083 LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1084 LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1085 LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1086 LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1087 LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1088 LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1089 LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1090 LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1091 LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1092 LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1093 LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const(char)* Name);
1094 LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V, const(char)* Name);
1095 LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V, const(char)* Name);
1096 LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const(char)* Name);
1097 LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const(char)* Name);
1098 LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const(char)* Name);
1099 LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty, LLVMValueRef Val, const(char)* Name);
1100 LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const(char)* Name);
1101 LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty, LLVMValueRef Val, const(char)* Name);
1102 LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
1103 LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal, const(char)* Name);
1104 LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
1105 LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer, LLVMValueRef* Indices, uint NumIndices, const(char)* Name);
1106 LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer, LLVMValueRef* Indices, uint NumIndices, const(char)* Name);
1107 LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer, uint Idx, const(char)* Name);
1108 LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const(char)* Str, const(char)* Name);
1109 LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const(char)* Str, const(char)* Name);
1110 LLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst);
1111 void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile);
1112 static if (LLVM_Version >= asVersion(3, 8, 0)) {
1113     LLVMAtomicOrdering LLVMGetOrdering(LLVMValueRef MemoryAccessInst);
1114 }
1115 static if (LLVM_Version >= asVersion(3, 8, 0)) {
1116     void LLVMSetOrdering(LLVMValueRef MemoryAccessInst, LLVMAtomicOrdering Ordering);
1117 }
1118 LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1119 LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1120 LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1121 LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1122 LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1123 LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1124 LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1125 LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1126 LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1127 LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1128 LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1129 LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1130 static if (LLVM_Version >= asVersion(3, 4, 0)) {
1131     LLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1132 }
1133 LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1134 LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1135 LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1136 LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1137 LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1138 LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1139 LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const(char)* Name);
1140 LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1141 LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1142 LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const(char)* Name);
1143 LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn, LLVMValueRef* Args, uint NumArgs, const(char)* Name);
1144 LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If, LLVMValueRef Then, LLVMValueRef Else, const(char)* Name);
1145 LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty, const(char)* Name);
1146 LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal, LLVMValueRef Index, const(char)* Name);
1147 LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal, LLVMValueRef EltVal, LLVMValueRef Index, const(char)* Name);
1148 LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1, LLVMValueRef V2, LLVMValueRef Mask, const(char)* Name);
1149 LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal, uint Index, const(char)* Name);
1150 LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal, LLVMValueRef EltVal, uint Index, const(char)* Name);
1151 LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val, const(char)* Name);
1152 LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val, const(char)* Name);
1153 LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, const(char)* Name);
1154 static if (LLVM_Version >= asVersion(3, 3, 0)) {
1155     LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, LLVMAtomicRMWBinOp op, LLVMValueRef PTR, LLVMValueRef Val, LLVMAtomicOrdering ordering, LLVMBool singleThread);
1156 }
1157 
1158 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1159     LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B, LLVMValueRef Ptr, LLVMValueRef Cmp, LLVMValueRef New, LLVMAtomicOrdering SuccessOrdering, LLVMAtomicOrdering FailureOrdering, LLVMBool SingleThread);
1160 }
1161 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1162     LLVMBool LLVMIsAtomicSingleThread(LLVMValueRef AtomicInst);
1163 }
1164 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1165     void LLVMSetAtomicSingleThread(LLVMValueRef AtomicInst, LLVMBool SingleThread);
1166 }
1167 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1168     LLVMAtomicOrdering LLVMGetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst);
1169 }
1170 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1171     void LLVMSetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst, LLVMAtomicOrdering Ordering);
1172 }
1173 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1174     LLVMAtomicOrdering LLVMGetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst);
1175 }
1176 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1177     void LLVMSetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst, LLVMAtomicOrdering Ordering);
1178 }
1179 
1180 static if (LLVM_Version >= asVersion(3, 5, 0)) {
1181     LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering ordering, LLVMBool singleThread, const(char)*Name);
1182 }
1183 
1184 /++ Module Providers ++/
1185 
1186 LLVMModuleProviderRef LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
1187 void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
1188 
1189 /++ Memory Buffers ++/
1190 
1191 LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const(char)* Path, LLVMMemoryBufferRef* OutMemBuf, char** OutMessage);
1192 LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef* OutMemBuf, char** OutMessage);
1193 static if (LLVM_Version >= asVersion(3, 3, 0)) {
1194     LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(const(char)* InputData, size_t InputDataLength, const(char)* BufferName, LLVMBool RequiresNullTerminator);
1195 }
1196 static if (LLVM_Version >= asVersion(3, 3, 0)) {
1197     LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(const(char)* InputData, size_t InputDataLength, const(char)* BufferName);
1198 }
1199 static if (LLVM_Version >= asVersion(3, 3, 0)) {
1200     const(char)* LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf);
1201 }
1202 static if (LLVM_Version >= asVersion(3, 3, 0)) {
1203     size_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf);
1204 }
1205 void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
1206 
1207 /++ Pass Registry ++/
1208 
1209 LLVMPassRegistryRef LLVMGetGlobalPassRegistry();
1210 
1211 /++ Pass Managers ++/
1212 
1213 LLVMPassManagerRef LLVMCreatePassManager();
1214 LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
1215 LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
1216 LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
1217 LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
1218 LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
1219 LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
1220 void LLVMDisposePassManager(LLVMPassManagerRef PM);
1221 
1222 /++ Threading ++/
1223 
1224 static if (LLVM_Version >= asVersion(3, 3, 0) && LLVM_Version < asVersion(3, 5, 0)) {
1225     LLVMBool LLVMStartMultithreaded();
1226 }
1227 static if (LLVM_Version >= asVersion(3, 3, 0) && LLVM_Version < asVersion(3, 5, 0)) {
1228     void LLVMStopMultithreaded();
1229 }
1230 static if (LLVM_Version >= asVersion(3, 3, 0)) {
1231     LLVMBool LLVMIsMultithreaded();
1232 }
1233 
1234 /+ Disassembler +/
1235 
1236 LLVMDisasmContextRef LLVMCreateDisasm(const(char)* TripleName, void* DisInfo, int TagType, LLVMOpInfoCallback GetOpInfo, LLVMSymbolLookupCallback SymbolLookUp);
1237 static if (LLVM_Version >= asVersion(3, 3, 0)) {
1238     LLVMDisasmContextRef LLVMCreateDisasmCPU(const(char)* Triple, const(char)* CPU, void* DisInfo, int TagType, LLVMOpInfoCallback GetOpInfo, LLVMSymbolLookupCallback SymbolLookUp);
1239 }
1240 static if (LLVM_Version >= asVersion(3, 6, 0)) {
1241     LLVMDisasmContextRef LLVMCreateDisasmCPUFeatures(const(char)* Triple, const(char)* CPU, const(char)* Features, void *DisInfo, int TagType, LLVMOpInfoCallback GetOpInfo, LLVMSymbolLookupCallback SymbolLookUp);
1242 }
1243 static if (LLVM_Version >= asVersion(3, 2, 0)) {
1244     int LLVMSetDisasmOptions(LLVMDisasmContextRef DC, ulong Options);
1245 }
1246 void LLVMDisasmDispose(LLVMDisasmContextRef DC);
1247 size_t LLVMDisasmInstruction(LLVMDisasmContextRef DC, ubyte* Bytes, ulong BytesSize, ulong PC, char* OutString, size_t OutStringSize);
1248 
1249 /+ Enhanced Disassembly +/
1250 
1251 static if (LLVM_Version < asVersion(3, 3, 0)) {
1252     int EDGetDisassembler(EDDisassemblerRef* disassembler, const(char)* triple, EDAssemblySyntax_t syntax);
1253 }
1254 static if (LLVM_Version < asVersion(3, 3, 0)) {
1255     int EDGetRegisterName(const(char)** regName, EDDisassemblerRef disassembler, uint regID);
1256 }
1257 static if (LLVM_Version < asVersion(3, 3, 0)) {
1258     int EDRegisterIsStackPointer(EDDisassemblerRef disassembler, uint regID);
1259 }
1260 static if (LLVM_Version < asVersion(3, 3, 0)) {
1261     int EDRegisterIsProgramCounter(EDDisassemblerRef disassembler, uint regID);
1262 }
1263 static if (LLVM_Version < asVersion(3, 3, 0)) {
1264     uint EDCreateInsts(EDInstRef* insts, uint count, EDDisassemblerRef disassembler, EDByteReaderCallback byteReader, ulong address, void* arg);
1265 }
1266 static if (LLVM_Version < asVersion(3, 3, 0)) {
1267     void EDReleaseInst(EDInstRef inst);
1268 }
1269 static if (LLVM_Version < asVersion(3, 3, 0)) {
1270     int EDInstByteSize(EDInstRef inst);
1271 }
1272 static if (LLVM_Version < asVersion(3, 3, 0)) {
1273     int EDGetInstString(const(char)** buf, EDInstRef inst);
1274 }
1275 static if (LLVM_Version < asVersion(3, 3, 0)) {
1276     int EDInstID(uint* instID, EDInstRef inst);
1277 }
1278 static if (LLVM_Version < asVersion(3, 3, 0)) {
1279     int EDInstIsBranch(EDInstRef inst);
1280 }
1281 static if (LLVM_Version < asVersion(3, 3, 0)) {
1282     int EDInstIsMove(EDInstRef inst);
1283 }
1284 static if (LLVM_Version < asVersion(3, 3, 0)) {
1285     int EDBranchTargetID(EDInstRef inst);
1286 }
1287 static if (LLVM_Version < asVersion(3, 3, 0)) {
1288     int EDMoveSourceID(EDInstRef inst);
1289 }
1290 static if (LLVM_Version < asVersion(3, 3, 0)) {
1291     int EDMoveTargetID(EDInstRef inst);
1292 }
1293 static if (LLVM_Version < asVersion(3, 3, 0)) {
1294     int EDNumTokens(EDInstRef inst);
1295 }
1296 static if (LLVM_Version < asVersion(3, 3, 0)) {
1297     int EDGetToken(EDTokenRef* token, EDInstRef inst, int index);
1298 }
1299 static if (LLVM_Version < asVersion(3, 3, 0)) {
1300     int EDGetTokenString(const(char)** buf, EDTokenRef token);
1301 }
1302 static if (LLVM_Version < asVersion(3, 3, 0)) {
1303     int EDOperandIndexForToken(EDTokenRef token);
1304 }
1305 static if (LLVM_Version < asVersion(3, 3, 0)) {
1306     int EDTokenIsWhitespace(EDTokenRef token);
1307 }
1308 static if (LLVM_Version < asVersion(3, 3, 0)) {
1309     int EDTokenIsPunctuation(EDTokenRef token);
1310 }
1311 static if (LLVM_Version < asVersion(3, 3, 0)) {
1312     int EDTokenIsOpcode(EDTokenRef token);
1313 }
1314 static if (LLVM_Version < asVersion(3, 3, 0)) {
1315     int EDTokenIsLiteral(EDTokenRef token);
1316 }
1317 static if (LLVM_Version < asVersion(3, 3, 0)) {
1318     int EDTokenIsRegister(EDTokenRef token);
1319 }
1320 static if (LLVM_Version < asVersion(3, 3, 0)) {
1321     int EDTokenIsNegativeLiteral(EDTokenRef token);
1322 }
1323 static if (LLVM_Version < asVersion(3, 3, 0)) {
1324     int EDLiteralTokenAbsoluteValue(ulong* value, EDTokenRef token);
1325 }
1326 static if (LLVM_Version < asVersion(3, 3, 0)) {
1327     int EDRegisterTokenValue(uint* registerID, EDTokenRef token);
1328 }
1329 static if (LLVM_Version < asVersion(3, 3, 0)) {
1330     int EDNumOperands(EDInstRef inst);
1331 }
1332 static if (LLVM_Version < asVersion(3, 3, 0)) {
1333     int EDGetOperand(EDOperandRef* operand, EDInstRef inst, int index);
1334 }
1335 static if (LLVM_Version < asVersion(3, 3, 0)) {
1336     int EDOperandIsRegister(EDOperandRef operand);
1337 }
1338 static if (LLVM_Version < asVersion(3, 3, 0)) {
1339     int EDOperandIsImmediate(EDOperandRef operand);
1340 }
1341 static if (LLVM_Version < asVersion(3, 3, 0)) {
1342     int EDOperandIsMemory(EDOperandRef operand);
1343 }
1344 static if (LLVM_Version < asVersion(3, 3, 0)) {
1345     int EDRegisterOperandValue(uint* value, EDOperandRef operand);
1346 }
1347 static if (LLVM_Version < asVersion(3, 3, 0)) {
1348     int EDImmediateOperandValue(ulong* value, EDOperandRef operand);
1349 }
1350 static if (LLVM_Version < asVersion(3, 3, 0)) {
1351     int EDEvaluateOperand(ulong* result, EDOperandRef operand, EDRegisterReaderCallback regReader, void* arg);
1352 }
1353 static if (LLVM_Version < asVersion(3, 3, 0)) {
1354     uint EDBlockCreateInsts(EDInstRef* insts, int count, EDDisassemblerRef disassembler, EDByteBlock_t byteBlock, ulong address);
1355 }
1356 static if (LLVM_Version < asVersion(3, 3, 0)) {
1357     int EDBlockEvaluateOperand(ulong* result, EDOperandRef operand, EDRegisterBlock_t regBlock);
1358 }
1359 static if (LLVM_Version < asVersion(3, 3, 0)) {
1360     int EDBlockVisitTokens(EDInstRef inst, EDTokenVisitor_t visitor);
1361 }
1362 
1363 /+ Execution Engine +/
1364 
1365 LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty, ulong N, LLVMBool IsSigned);
1366 LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void* P);
1367 LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N);
1368 uint LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef);
1369 ulong LLVMGenericValueToInt(LLVMGenericValueRef GenVal, LLVMBool IsSigned);
1370 void* LLVMGenericValueToPointer(LLVMGenericValueRef GenVal);
1371 double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal);
1372 void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal);
1373 LLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef* OutEE, LLVMModuleRef M, char** OutError);
1374 LLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef* OutInterp, LLVMModuleRef M, char** OutError);
1375 LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef* OutJIT, LLVMModuleRef M, uint OptLevel, char** OutError);
1376 static if (LLVM_Version >= asVersion(3, 3, 0)) {
1377     void LLVMInitializeMCJITCompilerOptions(LLVMMCJITCompilerOptions* Options, size_t SizeOfOptions);
1378 }
1379 static if (LLVM_Version >= asVersion(3, 3, 0)) {
1380     LLVMBool LLVMCreateMCJITCompilerForModule(LLVMExecutionEngineRef* OutJIT, LLVMModuleRef M, LLVMMCJITCompilerOptions* Options, size_t SizeOfOptions, char** OutError);
1381 }
1382 static if (LLVM_Version < asVersion(3, 8, 0)) {
1383     LLVMBool LLVMCreateExecutionEngine(LLVMExecutionEngineRef* OutEE, LLVMModuleProviderRef MP, char** OutError);
1384 }
1385 static if (LLVM_Version < asVersion(3, 8, 0)) {
1386     LLVMBool LLVMCreateInterpreter(LLVMExecutionEngineRef* OutInterp, LLVMModuleProviderRef MP, char** OutError);
1387 }
1388 static if (LLVM_Version < asVersion(3, 8, 0)) {
1389     LLVMBool LLVMCreateJITCompiler(LLVMExecutionEngineRef* OutJIT, LLVMModuleProviderRef MP, uint OptLevel, char** OutError);
1390 }
1391 void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE);
1392 void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE);
1393 void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE);
1394 int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F, uint ArgC, const(char*)* ArgV, const(char*)* EnvP);
1395 LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F, uint NumArgs, LLVMGenericValueRef* Args);
1396 void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F);
1397 void LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M);
1398 static if (LLVM_Version < asVersion(3, 8, 0)) {
1399     void LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP);
1400 }
1401 LLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M, LLVMModuleRef* OutMod, char** OutError);
1402 static if (LLVM_Version < asVersion(3, 8, 0)) {
1403     LLVMBool LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP, LLVMModuleRef* OutMod, char** OutError);
1404 }
1405 LLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const(char)* Name, LLVMValueRef* OutFn);
1406 void* LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef EE, LLVMValueRef Fn);
1407 LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
1408 static if (LLVM_Version >= asVersion(3, 5, 0)) {
1409     LLVMTargetMachineRef LLVMGetExecutionEngineTargetMachine(LLVMExecutionEngineRef EE);
1410 }
1411 void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global, void* Addr);
1412 void* LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global);
1413 static if (LLVM_Version >= asVersion(3, 6, 0)) {
1414     ulong LLVMGetGlobalValueAddress(LLVMExecutionEngineRef EE, const(char)*Name);
1415 }
1416 static if (LLVM_Version >= asVersion(3, 6, 0)) {
1417     ulong LLVMGetFunctionAddress(LLVMExecutionEngineRef EE, const(char)*Name);
1418 }
1419 static if (LLVM_Version >= asVersion(3, 4, 0)) {
1420     LLVMMCJITMemoryManagerRef LLVMCreateSimpleMCJITMemoryManager(void* Opaque, LLVMMemoryManagerAllocateCodeSectionCallback AllocateCodeSection, LLVMMemoryManagerAllocateDataSectionCallback AllocateDataSection, LLVMMemoryManagerFinalizeMemoryCallback FinalizeMemory, LLVMMemoryManagerDestroyCallback Destroy);
1421 }
1422 static if (LLVM_Version >= asVersion(3, 4, 0)) {
1423     void LLVMDisposeMCJITMemoryManager(LLVMMCJITMemoryManagerRef MM);
1424 }
1425 
1426 /+ Initialization Routines +/
1427 
1428 void LLVMInitializeCore(LLVMPassRegistryRef R);
1429 void LLVMInitializeTransformUtils(LLVMPassRegistryRef R);
1430 void LLVMInitializeScalarOpts(LLVMPassRegistryRef R);
1431 static if (LLVM_Version >= asVersion(3, 3, 0)) {
1432     void LLVMInitializeObjCARCOpts(LLVMPassRegistryRef R);
1433 }
1434 void LLVMInitializeVectorization(LLVMPassRegistryRef R);
1435 void LLVMInitializeInstCombine(LLVMPassRegistryRef R);
1436 void LLVMInitializeIPO(LLVMPassRegistryRef R);
1437 void LLVMInitializeInstrumentation(LLVMPassRegistryRef R);
1438 void LLVMInitializeAnalysis(LLVMPassRegistryRef R);
1439 void LLVMInitializeIPA(LLVMPassRegistryRef R);
1440 void LLVMInitializeCodeGen(LLVMPassRegistryRef R);
1441 void LLVMInitializeTarget(LLVMPassRegistryRef R);
1442 
1443 /+ Linker +/
1444 
1445 static if (LLVM_Version >= asVersion(3, 2, 0) && LLVM_Version < asVersion(3, 9, 0)) {
1446     LLVMBool LLVMLinkModules(LLVMModuleRef Dest, LLVMModuleRef Src, LLVMLinkerMode Mode, char** OutMessage);
1447 }
1448 static if (LLVM_Version >= asVersion(3, 8, 0)) {
1449     LLVMBool LLVMLinkModules2(LLVMModuleRef Dest, LLVMModuleRef Src);
1450 }
1451 
1452 /+ Link Time Optimization +/
1453 
1454 llvm_lto_t llvm_create_optimizer();
1455 void llvm_destroy_optimizer(llvm_lto_t lto);
1456 llvm_lto_status_t llvm_read_object_file(llvm_lto_t lto, const(char)* input_filename);
1457 llvm_lto_status_t llvm_optimize_modules(llvm_lto_t lto, const(char)* output_filename);
1458 
1459 /+ LTO +/
1460 
1461 const(char)* lto_get_version();
1462 const(char)* lto_get_error_message();
1463 bool lto_module_is_object_file(const(char)* path);
1464 bool lto_module_is_object_file_for_target(const(char)* path, const(char)* target_triple_prefix);
1465 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1466     lto_bool_t lto_module_has_objc_category(const(void)* mem, size_t length);
1467 }
1468 bool lto_module_is_object_file_in_memory(const(void)* mem, size_t length);
1469 bool lto_module_is_object_file_in_memory_for_target(const(void)* mem, size_t length, const(char)* target_triple_prefix);
1470 lto_module_t lto_module_create(const(char)* path);
1471 lto_module_t lto_module_create_from_memory(const(void)* mem, size_t length);
1472 static if (LLVM_Version >= asVersion(3, 5, 0)) {
1473     lto_module_t lto_module_create_from_memory_with_path(const(void)* mem, size_t length, const(char)*path);
1474 }
1475 
1476 static if (LLVM_Version >= asVersion(3, 6, 0)) {
1477     lto_module_t lto_module_create_in_local_context(const void *mem, size_t length, const(char)*path);
1478 }
1479 static if (LLVM_Version >= asVersion(3, 6, 0)) {
1480     lto_module_t lto_module_create_in_codegen_context(const void *mem, size_t length, const(char)*path, lto_code_gen_t cg);
1481 }
1482 lto_module_t lto_module_create_from_fd(int fd, const(char)* path, size_t file_size);
1483 lto_module_t lto_module_create_from_fd_at_offset(int fd, const(char)* path, size_t file_size, size_t map_size, size_t offset);
1484 void lto_module_dispose(lto_module_t mod);
1485 const(char)* lto_module_get_target_triple(lto_module_t mod);
1486 void lto_module_set_target_triple(lto_module_t mod, const(char)* triple);
1487 uint lto_module_get_num_symbols(lto_module_t mod);
1488 const(char)* lto_module_get_symbol_name(lto_module_t mod, uint index);
1489 lto_symbol_attributes lto_module_get_symbol_attribute(lto_module_t mod, uint index);
1490 static if (LLVM_Version >= asVersion(3, 5, 0) && LLVM_Version < asVersion(3, 7, 0)) {
1491     uint lto_module_get_num_deplibs(lto_module_t mod);
1492 }
1493 static if (LLVM_Version >= asVersion(3, 5, 0) && LLVM_Version < asVersion(3, 7, 0)) {
1494     const(char)* lto_module_get_deplib(lto_module_t mod, uint index);
1495 }
1496 static if (LLVM_Version >= asVersion(3, 5, 0) && LLVM_Version < asVersion(3, 7, 0)) {
1497     uint lto_module_get_num_linkeropts(lto_module_t mod);
1498 }
1499 static if (LLVM_Version >= asVersion(3, 5, 0) && LLVM_Version < asVersion(3, 7, 0)) {
1500     const(char)* lto_module_get_linkeropt(lto_module_t mod, uint index);
1501 }
1502 static if (LLVM_Version >= asVersion(3, 7, 0)) {
1503     const(char)* lto_module_get_linkeropts(lto_module_t mod);
1504 }
1505 static if (LLVM_Version >= asVersion(3, 5, 0)) {
1506     void lto_codegen_set_diagnostic_handler(lto_code_gen_t, lto_diagnostic_handler_t, void *);
1507 }
1508 lto_code_gen_t lto_codegen_create();
1509 static if (LLVM_Version >= asVersion(3, 6, 0)) {
1510     lto_code_gen_t lto_codegen_create_in_local_context();
1511 }
1512 void lto_codegen_dispose(lto_code_gen_t);
1513 bool lto_codegen_add_module(lto_code_gen_t cg, lto_module_t mod);
1514 bool lto_codegen_set_debug_model(lto_code_gen_t cg, lto_debug_model);
1515 bool lto_codegen_set_pic_model(lto_code_gen_t cg, lto_codegen_model);
1516 void lto_codegen_set_cpu(lto_code_gen_t cg, const(char)* cpu);
1517 void lto_codegen_set_assembler_path(lto_code_gen_t cg, const(char)* path);
1518 void lto_codegen_set_assembler_args(lto_code_gen_t cg, const(char)** args, int nargs);
1519 void lto_codegen_add_must_preserve_symbol(lto_code_gen_t cg, const(char)* symbol);
1520 bool lto_codegen_write_merged_modules(lto_code_gen_t cg, const(char)* path);
1521 const(void)* lto_codegen_compile(lto_code_gen_t cg, size_t* length);
1522 bool lto_codegen_compile_to_file(lto_code_gen_t cg, const(char)** name);
1523 static if (LLVM_Version >= asVersion(3, 7, 0)) {
1524     bool lto_codegen_optimize(lto_code_gen_t cg);
1525 }
1526 static if (LLVM_Version >= asVersion(3, 7, 0)) {
1527     const(void)* lto_codegen_compile_optimized(lto_code_gen_t cg, size_t* length);
1528 }
1529 static if (LLVM_Version >= asVersion(3, 7, 0)) {
1530     uint lto_api_version();
1531 }
1532 void lto_codegen_debug_options(lto_code_gen_t cg, const(char)* );
1533 static if (LLVM_Version >= asVersion(3, 3, 0)) {
1534     void lto_initialize_disassembler();
1535 }
1536 static if (LLVM_Version >= asVersion(3, 7, 0)) {
1537     void lto_codegen_set_should_internalize(lto_code_gen_t cg, bool ShouldInternalize);
1538 }
1539 static if (LLVM_Version >= asVersion(3, 7, 0)) {
1540     void lto_codegen_set_should_embed_uselists(lto_code_gen_t cg, bool ShouldEmbedUselists);
1541 }
1542 
1543 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1544     thinlto_code_gen_t thinlto_create_codegen();
1545 }
1546 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1547     void thinlto_codegen_dispose(thinlto_code_gen_t cg);
1548 }
1549 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1550     void thinlto_codegen_add_module(thinlto_code_gen_t cg, const(char)* identifier, const(char)* data, int length);
1551 }
1552 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1553     void thinlto_codegen_process(thinlto_code_gen_t cg);
1554 }
1555 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1556     uint thinlto_module_get_num_objects(thinlto_code_gen_t cg);
1557 }
1558 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1559     LTOObjectBuffer thinlto_module_get_object(thinlto_code_gen_t cg, uint index);
1560 }
1561 static if (LLVM_Version >= asVersion(4, 0, 0)) {
1562 	uint thinlto_module_get_num_object_files(thinlto_code_gen_t cg);
1563 	const(char)* thinlto_module_get_object_file(thinlto_code_gen_t cg, uint index);
1564 }
1565 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1566     lto_bool_t thinlto_codegen_set_pic_model(thinlto_code_gen_t cg, lto_codegen_model);
1567 }
1568 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1569     void thinlto_codegen_set_cache_dir(thinlto_code_gen_t cg, const(char)* cache_dir);
1570 }
1571 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1572     void thinlto_codegen_set_cache_pruning_interval(thinlto_code_gen_t cg, int interval);
1573 }
1574 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1575     void thinlto_codegen_set_final_cache_size_relative_to_available_space(thinlto_code_gen_t cg, uint percentage);
1576 }
1577 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1578     void thinlto_codegen_set_cache_entry_expiration(thinlto_code_gen_t cg, uint expiration);
1579 }
1580 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1581     void thinlto_codegen_set_savetemps_dir(thinlto_code_gen_t cg, const(char)* save_temps_dir);
1582 }
1583 static if (LLVM_Version >= asVersion(4, 0, 0)) {
1584 	void thinlto_set_generated_objects_dir(thinlto_code_gen_t cg, const(char)* save_temps_dir);
1585 }
1586 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1587     void thinlto_codegen_set_cpu(thinlto_code_gen_t cg, const(char)* cpu);
1588 }
1589 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1590     void thinlto_codegen_disable_codegen(thinlto_code_gen_t cg, lto_bool_t disable);
1591 }
1592 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1593     void thinlto_codegen_set_codegen_only(thinlto_code_gen_t cg, lto_bool_t codegen_only);
1594 }
1595 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1596     void thinlto_debug_options(const(char*) *options, int number);
1597 }
1598 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1599     lto_bool_t lto_module_is_thinlto(lto_module_t mod);
1600 }
1601 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1602     void thinlto_codegen_add_must_preserve_symbol(thinlto_code_gen_t cg, const(char)* name, int length);
1603 }
1604 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1605     void thinlto_codegen_add_cross_referenced_symbol(thinlto_code_gen_t cg, const(char)* name, int length);
1606 }
1607 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1608 	void thinlto_codegen_set_cache_size_bytes(thinlto_code_gen_t cg, uint max_size_bytes);
1609 }
1610 
1611 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1612 	void thinlto_codegen_set_cache_size_files(thinlto_code_gen_t cg, uint max_size_files);
1613 }
1614 
1615 
1616 /+ Object file reading and writing +/
1617 
1618 LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf);
1619 void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile);
1620 LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile);
1621 void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI);
1622 LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile, LLVMSectionIteratorRef SI);
1623 void LLVMMoveToNextSection(LLVMSectionIteratorRef SI);
1624 void LLVMMoveToContainingSection(LLVMSectionIteratorRef Sect, LLVMSymbolIteratorRef Sym);
1625 LLVMSymbolIteratorRef LLVMGetSymbols(LLVMObjectFileRef ObjectFile);
1626 void LLVMDisposeSymbolIterator(LLVMSymbolIteratorRef SI);
1627 LLVMBool LLVMIsSymbolIteratorAtEnd(LLVMObjectFileRef ObjectFile, LLVMSymbolIteratorRef SI);
1628 void LLVMMoveToNextSymbol(LLVMSymbolIteratorRef SI);
1629 const(char)* LLVMGetSectionName(LLVMSectionIteratorRef SI);
1630 ulong LLVMGetSectionSize(LLVMSectionIteratorRef SI);
1631 const(char)* LLVMGetSectionContents(LLVMSectionIteratorRef SI);
1632 ulong LLVMGetSectionAddress(LLVMSectionIteratorRef SI);
1633 LLVMBool LLVMGetSectionContainsSymbol(LLVMSectionIteratorRef SI, LLVMSymbolIteratorRef Sym);
1634 LLVMRelocationIteratorRef LLVMGetRelocations(LLVMSectionIteratorRef Section);
1635 void LLVMDisposeRelocationIterator(LLVMRelocationIteratorRef RI);
1636 LLVMBool LLVMIsRelocationIteratorAtEnd(LLVMSectionIteratorRef Section, LLVMRelocationIteratorRef RI);
1637 void LLVMMoveToNextRelocation(LLVMRelocationIteratorRef RI);
1638 const(char)* LLVMGetSymbolName(LLVMSymbolIteratorRef SI);
1639 ulong LLVMGetSymbolAddress(LLVMSymbolIteratorRef SI);
1640 static if (LLVM_Version < asVersion(3, 5, 0)) {
1641     ulong LLVMGetSymbolFileOffset(LLVMSymbolIteratorRef SI);
1642 }
1643 ulong LLVMGetSymbolSize(LLVMSymbolIteratorRef SI);
1644 static if (LLVM_Version < asVersion(3, 7, 0)) {
1645     ulong LLVMGetRelocationAddress(LLVMRelocationIteratorRef RI);
1646 }
1647 ulong LLVMGetRelocationOffset(LLVMRelocationIteratorRef RI);
1648 LLVMSymbolIteratorRef LLVMGetRelocationSymbol(LLVMRelocationIteratorRef RI);
1649 ulong LLVMGetRelocationType(LLVMRelocationIteratorRef RI);
1650 const(char)* LLVMGetRelocationTypeName(LLVMRelocationIteratorRef RI);
1651 const(char)* LLVMGetRelocationValueString(LLVMRelocationIteratorRef RI);
1652 
1653 /+ Target information +/
1654 
1655 mixin(LLVM_Targets.map!(t => "nothrow void LLVMInitialize" ~ t ~ "TargetInfo();").joiner.array.orEmpty);
1656 mixin(LLVM_Targets.map!(t => "nothrow void LLVMInitialize" ~ t ~ "Target();").joiner.array.orEmpty);
1657 mixin(LLVM_Targets.map!(t => "nothrow void LLVMInitialize" ~ t ~ "TargetMC();").joiner.array.orEmpty);
1658 mixin(LLVM_AsmPrinters.map!(t => "nothrow void LLVMInitialize" ~ t ~ "AsmPrinter();").joiner.array.orEmpty);
1659 mixin(LLVM_AsmParsers.map!(t => "nothrow void LLVMInitialize" ~ t ~ "AsmParser();").joiner.array.orEmpty);
1660 mixin(LLVM_Disassemblers.map!(t => "nothrow void LLVMInitialize" ~ t ~ "Disassembler();").joiner.array.orEmpty);
1661 
1662 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1663     LLVMTargetDataRef LLVMGetModuleDataLayout(LLVMModuleRef M);
1664 }
1665 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1666     void LLVMSetModuleDataLayout(LLVMModuleRef M, LLVMTargetDataRef DL);
1667 }
1668 LLVMTargetDataRef LLVMCreateTargetData(const(char)* StringRep);
1669 static if (LLVM_Version < asVersion(3, 9, 0)) {
1670     void LLVMAddTargetData(LLVMTargetDataRef TD, LLVMPassManagerRef PM);
1671 }
1672 void LLVMAddTargetLibraryInfo(LLVMTargetLibraryInfoRef TLI, LLVMPassManagerRef PM);
1673 char* LLVMCopyStringRepOfTargetData(LLVMTargetDataRef TD);
1674 LLVMByteOrdering LLVMByteOrder(LLVMTargetDataRef TD);
1675 uint LLVMPointerSize(LLVMTargetDataRef TD);
1676 static if (LLVM_Version >= asVersion(3, 2, 0)) {
1677     uint LLVMPointerSizeForAS(LLVMTargetDataRef TD, uint AS);
1678 }
1679 LLVMTypeRef LLVMIntPtrType(LLVMTargetDataRef TD);
1680 static if (LLVM_Version >= asVersion(3, 2, 0)) {
1681     LLVMTypeRef LLVMIntPtrTypeForAS(LLVMTargetDataRef TD, uint AS);
1682 }
1683 static if (LLVM_Version >= asVersion(3, 4, 0)) {
1684     LLVMTypeRef LLVMIntPtrTypeInContext(LLVMContextRef C, LLVMTargetDataRef TD);
1685 }
1686 static if (LLVM_Version >= asVersion(3, 4, 0)) {
1687     LLVMTypeRef LLVMIntPtrTypeForASInContext(LLVMContextRef C, LLVMTargetDataRef TD, uint AS);
1688 }
1689 ulong LLVMSizeOfTypeInBits(LLVMTargetDataRef TD, LLVMTypeRef Ty);
1690 ulong LLVMStoreSizeOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
1691 ulong LLVMABISizeOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
1692 uint LLVMABIAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
1693 uint LLVMCallFrameAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
1694 uint LLVMPreferredAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
1695 uint LLVMPreferredAlignmentOfGlobal(LLVMTargetDataRef TD, LLVMValueRef GlobalVar);
1696 uint LLVMElementAtOffset(LLVMTargetDataRef TD, LLVMTypeRef StructTy, ulong Offset);
1697 ulong LLVMOffsetOfElement(LLVMTargetDataRef TD, LLVMTypeRef StructTy, uint Element);
1698 void LLVMDisposeTargetData(LLVMTargetDataRef TD);
1699 
1700 /+ Target machine +/
1701 
1702 LLVMTargetRef LLVMGetFirstTarget();
1703 LLVMTargetRef LLVMGetNextTarget(LLVMTargetRef T);
1704 static if (LLVM_Version >= asVersion(3, 4, 0)) {
1705     LLVMTargetRef LLVMGetTargetFromName(const(char)* Name);
1706 }
1707 static if (LLVM_Version >= asVersion(3, 4, 0)) {
1708     LLVMBool LLVMGetTargetFromTriple(const(char)* Triple, LLVMTargetRef* T, char** ErrorMessage);
1709 }
1710 const(char)* LLVMGetTargetName(LLVMTargetRef T);
1711 const(char)* LLVMGetTargetDescription(LLVMTargetRef T);
1712 LLVMBool LLVMTargetHasJIT(LLVMTargetRef T);
1713 LLVMBool LLVMTargetHasTargetMachine(LLVMTargetRef T);
1714 LLVMBool LLVMTargetHasAsmBackend(LLVMTargetRef T);
1715 LLVMTargetMachineRef LLVMCreateTargetMachine(LLVMTargetRef T, const(char)* Triple,  const(char)* CPU, const(char)* Features, LLVMCodeGenOptLevel Level, LLVMRelocMode Reloc, LLVMCodeModel CodeModel);
1716 void LLVMDisposeTargetMachine(LLVMTargetMachineRef T);
1717 LLVMTargetRef LLVMGetTargetMachineTarget(LLVMTargetMachineRef T);
1718 char* LLVMGetTargetMachineTriple(LLVMTargetMachineRef T);
1719 char* LLVMGetTargetMachineCPU(LLVMTargetMachineRef T);
1720 char* LLVMGetTargetMachineFeatureString(LLVMTargetMachineRef T);
1721 static if (LLVM_Version < asVersion(3, 7, 0)) {
1722     LLVMTargetDataRef LLVMGetTargetMachineData(LLVMTargetMachineRef T);
1723 }
1724 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1725     LLVMTargetDataRef LLVMCreateTargetDataLayout(LLVMTargetMachineRef T);
1726 }
1727 static if (LLVM_Version >= asVersion(3, 4, 0)) {
1728     void LLVMSetTargetMachineAsmVerbosity(LLVMTargetMachineRef T, LLVMBool VerboseAsm);
1729 }
1730 LLVMBool LLVMTargetMachineEmitToFile(LLVMTargetMachineRef T, LLVMModuleRef M,  char* Filename, LLVMCodeGenFileType codegen, char** ErrorMessage);
1731 static if (LLVM_Version >= asVersion(3, 3, 0)) {
1732     LLVMBool LLVMTargetMachineEmitToMemoryBuffer(LLVMTargetMachineRef T, LLVMModuleRef M, LLVMCodeGenFileType codegen, char** ErrorMessage, LLVMMemoryBufferRef* OutMemBuf);
1733 }
1734 static if (LLVM_Version >= asVersion(3, 4, 0)) {
1735     char* LLVMGetDefaultTargetTriple();
1736 }
1737 static if (LLVM_Version >= asVersion(3, 5, 0)) {
1738     void LLVMAddAnalysisPasses(LLVMTargetMachineRef T, LLVMPassManagerRef PM);
1739 }
1740 
1741 /+ Support +/
1742 static if (LLVM_Version >= asVersion(3, 4, 0)) {
1743     LLVMBool LLVMLoadLibraryPermanently(const(char)* Filename);
1744 }
1745 static if (LLVM_Version >= asVersion(3, 6, 0)) {
1746     void LLVMParseCommandLineOptions(int argc, const(char*)* argv, const(char)* Overview);
1747 }
1748 static if (LLVM_Version >= asVersion(3, 7, 0)) {
1749     void* LLVMSearchForAddressOfSymbol(const(char)* symbolName);
1750 }
1751 static if (LLVM_Version >= asVersion(3, 7, 0)) {
1752     void LLVMAddSymbol(const(char) *symbolName, void *symbolValue);
1753 }
1754 
1755 /+ IRReader +/
1756 static if (LLVM_Version >= asVersion(3, 4, 0)) {
1757     LLVMBool LLVMParseIRInContext(LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleRef* OutM, char** OutMessage);
1758 }
1759 
1760 /+ JIT compilation of LLVM IR +/
1761 static if (LLVM_Version >= asVersion(5, 0, 0) && LLVM_Version < asVersion(7, 0, 0)) {
1762 	LLVMSharedModuleRef LLVMOrcMakeSharedModule(LLVMModuleRef Mod);
1763 	void LLVMOrcDisposeSharedModuleRef(LLVMSharedModuleRef SharedMod);
1764 }
1765 static if (LLVM_Version >= asVersion(5, 0, 0) && LLVM_Version < asVersion(6, 0, 0)) {
1766 	LLVMSharedObjectBufferRef LLVMOrcMakeSharedObjectBuffer(LLVMMemoryBufferRef ObjBuffer);
1767 	void LLVMOrcDisposeSharedObjectBufferRef(LLVMSharedObjectBufferRef SharedObjBuffer);
1768 }
1769 static if (LLVM_Version >= asVersion(3, 8, 0)) {
1770     LLVMOrcJITStackRef LLVMOrcCreateInstance(LLVMTargetMachineRef TM);
1771 }
1772 static if (LLVM_Version >= asVersion(3, 9, 0)) {
1773     const(char)* LLVMOrcGetErrorMsg(LLVMOrcJITStackRef JITStack);
1774 }
1775 static if (LLVM_Version >= asVersion(3, 8, 0)) {
1776     void LLVMOrcGetMangledSymbol(LLVMOrcJITStackRef JITStack, char** MangledSymbol, const(char)* Symbol);
1777 }
1778 static if (LLVM_Version >= asVersion(3, 8, 0)) {
1779     void LLVMOrcDisposeMangledSymbol(char* MangledSymbol);
1780 }
1781 
1782 static if (LLVM_Version >= asVersion(5, 0, 0)) {
1783 	LLVMOrcErrorCode LLVMOrcCreateLazyCompileCallback(LLVMOrcJITStackRef JITStack, LLVMOrcTargetAddress* RetAddr, LLVMOrcLazyCompileCallbackFn Callback, void* CallbackCtx);
1784 } else static if (LLVM_Version >= asVersion(3, 8, 0)) {
1785     LLVMOrcTargetAddress LLVMOrcCreateLazyCompileCallback(LLVMOrcJITStackRef JITStack, LLVMOrcLazyCompileCallbackFn Callback, void* CallbackCtx);
1786 }
1787 static if (LLVM_Version >= asVersion(3, 8, 0)) {
1788     void LLVMOrcCreateIndirectStub(LLVMOrcJITStackRef JITStack, const(char)* StubName, LLVMOrcTargetAddress InitAddr);
1789 }
1790 static if (LLVM_Version >= asVersion(3, 8, 0)) {
1791     void LLVMOrcSetIndirectStubPointer(LLVMOrcJITStackRef JITStack, const(char)* StubName, LLVMOrcTargetAddress NewAddr);
1792 }
1793 
1794 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1795 	LLVMOrcErrorCode LLVMOrcAddEagerlyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle* RetHandle, LLVMModuleRef Mod, LLVMOrcSymbolResolverFn SymbolResolver, void* SymbolResolverCtx);
1796 } else static if (LLVM_Version >= asVersion(5, 0, 0)) {
1797 	LLVMOrcErrorCode LLVMOrcAddEagerlyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle* RetHandle, LLVMSharedModuleRef Mod, LLVMOrcSymbolResolverFn SymbolResolver, void* SymbolResolverCtx);
1798 } else static if (LLVM_Version >= asVersion(3, 8, 0)) {
1799     LLVMOrcModuleHandle LLVMOrcAddEagerlyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMModuleRef Mod, LLVMOrcSymbolResolverFn SymbolResolver, void* SymbolResolverCtx);
1800 }
1801 
1802 
1803 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1804 	LLVMOrcErrorCode LLVMOrcAddLazilyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle* RetHandle, LLVMModuleRef Mod, LLVMOrcSymbolResolverFn SymbolResolver, void* SymbolResolverCtx);
1805 } else static if (LLVM_Version >= asVersion(5, 0, 0)) {
1806 	LLVMOrcErrorCode LLVMOrcAddLazilyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle* RetHandle, LLVMSharedModuleRef Mod, LLVMOrcSymbolResolverFn SymbolResolver, void* SymbolResolverCtx);
1807 } else static if (LLVM_Version >= asVersion(3, 8, 0)) {
1808     LLVMOrcModuleHandle LLVMOrcAddLazilyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMModuleRef Mod, LLVMOrcSymbolResolverFn SymbolResolver, void* SymbolResolverCtx);
1809 }
1810 static if (LLVM_Version >= asVersion(6, 0, 0)) {
1811 	LLVMOrcErrorCode LLVMOrcAddObjectFile(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle* RetHandle, LLVMMemoryBufferRef Obj, LLVMOrcSymbolResolverFn SymbolResolver, void* SymbolResolverCtx);
1812 } else static if (LLVM_Version >= asVersion(5, 0, 0)) {
1813 	LLVMOrcErrorCode LLVMOrcAddObjectFile(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle* RetHandle, LLVMSharedObjectBufferRef Obj, LLVMOrcSymbolResolverFn SymbolResolver, void* SymbolResolverCtx);
1814 
1815 } else static if (LLVM_Version >= asVersion(3, 8, 0)) {
1816     LLVMOrcModuleHandle LLVMOrcAddObjectFile(LLVMOrcJITStackRef JITStack, LLVMObjectFileRef Obj, LLVMOrcSymbolResolverFn SymbolResolver, void* SymbolResolverCtx);
1817 }
1818 static if (LLVM_Version >= asVersion(5, 0, 0)) {
1819 	LLVMOrcErrorCode LLVMOrcRemoveModule(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle H);
1820 } else static if (LLVM_Version >= asVersion(3, 8, 0)) {
1821     void LLVMOrcRemoveModule(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle H);
1822 }
1823 static if (LLVM_Version >= asVersion(5, 0, 0)) {
1824 	LLVMOrcErrorCode LLVMOrcGetSymbolAddress(LLVMOrcJITStackRef JITStack, LLVMOrcTargetAddress *RetAddr, const(char)* SymbolName);
1825 } else static if (LLVM_Version >= asVersion(3, 8, 0)) {
1826     LLVMOrcTargetAddress LLVMOrcGetSymbolAddress(LLVMOrcJITStackRef JITStack, const(char)* SymbolName);
1827 }
1828 
1829 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1830 	LLVMOrcErrorCode LLVMOrcGetSymbolAddressIn(LLVMOrcJITStackRef JITStack, LLVMOrcTargetAddress* RetAddr, LLVMOrcModuleHandle H, const(char)* SymbolName);
1831 }
1832 
1833 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1834 	LLVMOrcErrorCode LLVMOrcDisposeInstance(LLVMOrcJITStackRef JITStack);
1835 }
1836 
1837 static if (LLVM_Version >= asVersion(5, 0, 0)) {
1838 	LLVMOrcErrorCode LLVMOrcDisposeInstance(LLVMOrcJITStackRef JITStack);
1839 } else static if (LLVM_Version >= asVersion(3, 8, 0)) {
1840     void LLVMOrcDisposeInstance(LLVMOrcJITStackRef JITStack);
1841 }
1842 
1843 /+ Debug info flags +/
1844 
1845 static if (LLVM_Version >= asVersion(6, 0, 0)) {
1846 	uint LLVMDebugMetadataVersion();
1847 }
1848 static if (LLVM_Version >= asVersion(6, 0, 0)) {
1849 	uint LLVMGetModuleDebugMetadataVersion(LLVMModuleRef Module);
1850 }
1851 static if (LLVM_Version >= asVersion(6, 0, 0)) {
1852 	uint LLVMGetModuleDebugMetadataVersion(LLVMModuleRef Module);
1853 }
1854 static if (LLVM_Version >= asVersion(6, 0, 0)) {
1855 	LLVMBool LLVMStripModuleDebugInfo(LLVMModuleRef Module);
1856 }
1857 static if (LLVM_Version >= asVersion(6, 0, 0)) {
1858 	LLVMDIBuilderRef LLVMCreateDIBuilderDisallowUnresolved(LLVMModuleRef M);
1859 }
1860 static if (LLVM_Version >= asVersion(6, 0, 0)) {
1861 	LLVMDIBuilderRef LLVMCreateDIBuilder(LLVMModuleRef M);
1862 }
1863 static if (LLVM_Version >= asVersion(6, 0, 0)) {
1864 	void LLVMDisposeDIBuilder(LLVMDIBuilderRef Builder);
1865 }
1866 static if (LLVM_Version >= asVersion(6, 0, 0)) {
1867 	void LLVMDIBuilderFinalize(LLVMDIBuilderRef Builder);
1868 }
1869 static if (LLVM_Version >= asVersion(6, 0, 0)) {
1870 	LLVMMetadataRef LLVMDIBuilderCreateCompileUnit(LLVMDIBuilderRef Builder, LLVMDWARFSourceLanguage Lang, LLVMMetadataRef FileRef, const(char)* Producer, size_t ProducerLen, LLVMBool isOptimized, const(char)* Flags, size_t FlagsLen, uint RuntimeVer, const(char)* SplitName, size_t SplitNameLen, LLVMDWARFEmissionKind Kind, uint DWOId, LLVMBool SplitDebugInlining, LLVMBool DebugInfoForProfiling);
1871 }
1872 static if (LLVM_Version >= asVersion(6, 0, 0)) {
1873 	LLVMMetadataRef LLVMDIBuilderCreateFile(LLVMDIBuilderRef Builder, const(char)* Filename, size_t FilenameLen, const(char)* Directory, size_t DirectoryLen);
1874 }
1875 static if (LLVM_Version >= asVersion(6, 0, 0)) {
1876 	LLVMMetadataRef LLVMDIBuilderCreateDebugLocation(LLVMContextRef Ctx, uint Line, uint Column, LLVMMetadataRef Scope, LLVMMetadataRef InlinedAt);
1877 }
1878 
1879 
1880 
1881 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1882 	LLVMComdatRef LLVMGetOrInsertComdat(LLVMModuleRef M, const(char)* Name);
1883 }
1884 
1885 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1886 	LLVMComdatRef LLVMGetComdat(LLVMValueRef V);
1887 }
1888 
1889 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1890 	void LLVMSetComdat(LLVMValueRef V, LLVMComdatRef C);
1891 }
1892 
1893 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1894 	LLVMComdatSelectionKind LLVMGetComdatSelectionKind(LLVMComdatRef C);
1895 }
1896 
1897 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1898 	void LLVMSetComdatSelectionKind(LLVMComdatRef C, LLVMComdatSelectionKind Kind);
1899 }
1900 
1901 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1902 	const(char)* LLVMGetSourceFileName(LLVMModuleRef M, size_t* Len);
1903 }
1904 
1905 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1906 	void LLVMSetSourceFileName(LLVMModuleRef M, const(char)* Name, size_t Len);
1907 }
1908 
1909 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1910 	LLVMModuleFlagEntry* LLVMCopyModuleFlagsMetadata(LLVMModuleRef M, size_t* Len);
1911 }
1912 
1913 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1914 	void LLVMDisposeModuleFlagsMetadata(LLVMModuleFlagEntry* Entries);
1915 }
1916 
1917 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1918 	LLVMModuleFlagBehavior LLVMModuleFlagEntriesGetFlagBehavior(LLVMModuleFlagEntry* Entries, uint Index);
1919 }
1920 
1921 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1922 	const(char)* LLVMModuleFlagEntriesGetKey(LLVMModuleFlagEntry* Entries, uint Index, size_t* Len);
1923 }
1924 
1925 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1926 	LLVMMetadataRef LLVMModuleFlagEntriesGetMetadata(LLVMModuleFlagEntry* Entries, uint Index);
1927 }
1928 
1929 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1930 	LLVMMetadataRef LLVMGetModuleFlag(LLVMModuleRef M, const(char)* Key, size_t KeyLen);
1931 }
1932 
1933 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1934 	void LLVMAddModuleFlag(LLVMModuleRef M, LLVMModuleFlagBehavior Behavior, const(char)* Key, size_t KeyLen, LLVMMetadataRef Val);
1935 }
1936 
1937 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1938 	const(char)* LLVMGetModuleInlineAsm(LLVMModuleRef M, size_t* Len);
1939 }
1940 
1941 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1942 	void LLVMAppendModuleInlineAsm(LLVMModuleRef M, const(char)* Asm, size_t Len);
1943 }
1944 
1945 
1946 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1947 	LLVMValueRef LLVMGetNamedGlobalAlias(LLVMModuleRef M, const(char)* Name, size_t NameLen);
1948 }
1949 
1950 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1951 	LLVMValueRef LLVMGetFirstGlobalAlias(LLVMModuleRef M);
1952 }
1953 
1954 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1955 	LLVMValueRef LLVMGetLastGlobalAlias(LLVMModuleRef M);
1956 }
1957 
1958 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1959 	LLVMValueRef LLVMGetNextGlobalAlias(LLVMValueRef GA);
1960 }
1961 
1962 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1963 	LLVMValueRef LLVMGetPreviousGlobalAlias(LLVMValueRef GA);
1964 }
1965 
1966 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1967 	LLVMValueRef LLVMAliasGetAliasee(LLVMValueRef Alias);
1968 }
1969 
1970 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1971 	void LLVMAliasSetAliasee(LLVMValueRef Alias, LLVMValueRef Aliasee);
1972 }
1973 
1974 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1975 	LLVMValueRef LLVMBuildCleanupRet(LLVMBuilderRef B, LLVMValueRef CatchPad, LLVMBasicBlockRef BB);
1976 }
1977 
1978 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1979 	LLVMValueRef LLVMBuildCatchRet(LLVMBuilderRef B, LLVMValueRef CatchPad, LLVMBasicBlockRef BB);
1980 }
1981 
1982 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1983 	LLVMValueRef LLVMBuildCatchPad(LLVMBuilderRef B, LLVMValueRef ParentPad, LLVMValueRef* Args, uint NumArgs, const (char)* Name);
1984 }
1985 
1986 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1987 	LLVMValueRef LLVMBuildCleanupPad(LLVMBuilderRef B, LLVMValueRef ParentPad, LLVMValueRef* Args, uint NumArgs, const (char)* Name);
1988 }
1989 
1990 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1991 	LLVMValueRef LLVMBuildCatchSwitch(LLVMBuilderRef B, LLVMValueRef ParentPad, LLVMBasicBlockRef UnwindBB, uint NumHandlers, const (char)* Name);
1992 }
1993 
1994 
1995 static if (LLVM_Version >= asVersion(7, 0, 0)) {
1996 	void LLVMAddHandler(LLVMValueRef CatchSwitch, LLVMBasicBlockRef Dest);
1997 }
1998 
1999 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2000 	uint LLVMGetNumHandlers(LLVMValueRef CatchSwitch);
2001 }
2002 
2003 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2004 	void LLVMGetHandlers(LLVMValueRef CatchSwitch, LLVMBasicBlockRef* Handlers);
2005 }
2006 
2007 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2008 	void LLVMSetArgOperand(LLVMValueRef Funclet, uint i, LLVMValueRef value);
2009 }
2010 
2011 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2012 	LLVMValueRef LLVMGetParentCatchSwitch(LLVMValueRef CatchPad);
2013 }
2014 
2015 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2016 	void LLVMSetParentCatchSwitch(LLVMValueRef CatchPad, LLVMValueRef CatchSwitch);
2017 }
2018 
2019 
2020 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2021 	LLVMMetadataRef LLVMDIBuilderCreateModule(LLVMDIBuilderRef Builder, LLVMMetadataRef ParentScope, const(char)* Name, size_t NameLen, const(char)* ConfigMacros, size_t ConfigMacrosLen, const(char)* IncludePath, size_t IncludePathLen, const(char)* ISysRoot, size_t ISysRootLen);
2022 }
2023 
2024 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2025 	LLVMMetadataRef LLVMDIBuilderCreateNameSpace(LLVMDIBuilderRef Builder, LLVMMetadataRef ParentScope, const(char)* Name, size_t NameLen, LLVMBool ExportSymbols);
2026 }
2027 
2028 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2029 	LLVMMetadataRef LLVMDIBuilderCreateFunction(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const(char)* Name, size_t NameLen, const(char)* LinkageName, size_t LinkageNameLen, LLVMMetadataRef File, uint LineNo, LLVMMetadataRef Ty, LLVMBool IsLocalToUnit, LLVMBool IsDefinition, uint ScopeLine, LLVMDIFlags Flags, LLVMBool IsOptimized);
2030 }
2031 
2032 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2033 	LLVMMetadataRef LLVMDIBuilderCreateLexicalBlock( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, LLVMMetadataRef File, uint Line, uint Column);
2034 }
2035 
2036 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2037 	LLVMMetadataRef LLVMDIBuilderCreateLexicalBlockFile(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, LLVMMetadataRef File, uint Discriminator);
2038 }
2039 
2040 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2041 	LLVMMetadataRef LLVMDIBuilderCreateImportedModuleFromNamespace(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, LLVMMetadataRef NS, LLVMMetadataRef File, uint Line);
2042 }
2043 
2044 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2045 	LLVMMetadataRef LLVMDIBuilderCreateImportedModuleFromAlias(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, LLVMMetadataRef ImportedEntity, LLVMMetadataRef File, uint Line);
2046 }
2047 
2048 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2049 	LLVMMetadataRef LLVMDIBuilderCreateImportedModuleFromModule(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, LLVMMetadataRef M, LLVMMetadataRef File, uint Line);
2050 }
2051 
2052 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2053 	LLVMMetadataRef LLVMDIBuilderCreateImportedDeclaration(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, LLVMMetadataRef Decl, LLVMMetadataRef File, uint Line, const(char)* Name, size_t NameLen);
2054 }
2055 
2056 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2057 	uint LLVMDILocationGetLine(LLVMMetadataRef Location);
2058 }
2059 
2060 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2061 	uint LLVMDILocationGetColumn(LLVMMetadataRef Location);
2062 }
2063 
2064 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2065 	LLVMMetadataRef LLVMDILocationGetScope(LLVMMetadataRef Location);
2066 }
2067 
2068 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2069 	LLVMMetadataRef LLVMDIBuilderGetOrCreateTypeArray(LLVMDIBuilderRef Builder, LLVMMetadataRef* Data, size_t NumElements);
2070 }
2071 
2072 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2073 	LLVMMetadataRef LLVMDIBuilderCreateSubroutineType(LLVMDIBuilderRef Builder, LLVMMetadataRef File, LLVMMetadataRef* ParameterTypes, uint NumParameterTypes, LLVMDIFlags Flags);
2074 }
2075 
2076 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2077 	LLVMMetadataRef LLVMDIBuilderCreateEnumerationType(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const(char)* Name, size_t NameLen, LLVMMetadataRef File, uint LineNumber, uint64_t SizeInBits, uint32_t AlignInBits, LLVMMetadataRef* Elements, uint NumElements, LLVMMetadataRef ClassTy);
2078 }
2079 
2080 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2081 	LLVMMetadataRef LLVMDIBuilderCreateUnionType(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const(char)* Name, size_t NameLen, LLVMMetadataRef File, uint LineNumber, uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags, LLVMMetadataRef *Elements, uint NumElements, uint RunTimeLang, const(char)* UniqueId, size_t UniqueIdLen);
2082 }
2083 
2084 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2085 	LLVMMetadataRef LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, uint64_t Size, uint32_t AlignInBits, LLVMMetadataRef Ty, LLVMMetadataRef* Subscripts, uint NumSubscripts);
2086 }
2087 
2088 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2089 	LLVMMetadataRef LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, uint64_t Size, uint32_t AlignInBits, LLVMMetadataRef Ty, LLVMMetadataRef *Subscripts, uint NumSubscripts);
2090 }
2091 
2092 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2093 	LLVMMetadataRef LLVMDIBuilderCreateUnspecifiedType(LLVMDIBuilderRef Builder, const(char)* Name, size_t NameLen);
2094 }
2095 
2096 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2097 	LLVMMetadataRef LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Builder, const(char)* Name, size_t NameLen, uint64_t SizeInBits, LLVMDWARFTypeEncoding Encoding);
2098 }
2099 
2100 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2101 	LLVMMetadataRef LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Builder, const(char)* Name, size_t NameLen, uint64_t SizeInBits, LLVMDWARFTypeEncoding Encoding);
2102 }
2103 
2104 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2105 	LLVMMetadataRef LLVMDIBuilderCreatePointerType(LLVMDIBuilderRef Builder, LLVMMetadataRef PointeeTy, uint64_t SizeInBits, uint32_t AlignInBits, uint AddressSpace, const(char)* Name, size_t NameLen);
2106 }
2107 
2108 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2109 	LLVMMetadataRef LLVMDIBuilderCreateStructType( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const(char)* Name, size_t NameLen, LLVMMetadataRef File, uint LineNumber, uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags, LLVMMetadataRef DerivedFrom, LLVMMetadataRef* Elements, uint NumElements, uint RunTimeLang, LLVMMetadataRef VTableHolder, const(char)* UniqueId, size_t UniqueIdLen);
2110 }
2111 
2112 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2113 	LLVMMetadataRef LLVMDIBuilderCreateMemberType( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const(char)* Name, size_t NameLen, LLVMMetadataRef File, uint LineNo, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, LLVMDIFlags Flags, LLVMMetadataRef Ty);
2114 }
2115 
2116 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2117 	LLVMMetadataRef LLVMDIBuilderCreateStaticMemberType(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const(char)* Name, size_t NameLen, LLVMMetadataRef File, uint LineNumber, LLVMMetadataRef Type, LLVMDIFlags Flags, LLVMValueRef ConstantVal, uint32_t AlignInBits);
2118 }
2119 
2120 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2121 	LLVMMetadataRef LLVMDIBuilderCreateMemberPointerType(LLVMDIBuilderRef Builder, LLVMMetadataRef PointeeType, LLVMMetadataRef ClassType, uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags);
2122 }
2123 
2124 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2125 	LLVMMetadataRef LLVMDIBuilderCreateObjCIVar(LLVMDIBuilderRef Builder, const(char)* Name, size_t NameLen, LLVMMetadataRef File, uint LineNo, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, LLVMDIFlags Flags, LLVMMetadataRef Ty, LLVMMetadataRef PropertyNode);
2126 }
2127 
2128 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2129 	LLVMMetadataRef LLVMDIBuilderCreateObjCProperty(LLVMDIBuilderRef Builder, const(char)* Name, size_t NameLen, LLVMMetadataRef File, uint LineNo, const(char)* GetterName, size_t GetterNameLen, const(char)* SetterName, size_t SetterNameLen, uint PropertyAttributes, LLVMMetadataRef Ty);
2130 }
2131 
2132 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2133 	LLVMMetadataRef LLVMDIBuilderCreateObjectPointerType(LLVMDIBuilderRef Builder, LLVMMetadataRef Type);
2134 }
2135 
2136 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2137 	LLVMMetadataRef LLVMDIBuilderCreateQualifiedType(LLVMDIBuilderRef Builder, uint Tag, LLVMMetadataRef Type);
2138 }
2139 
2140 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2141 	LLVMMetadataRef LLVMDIBuilderCreateReferenceType(LLVMDIBuilderRef Builder, uint Tag, LLVMMetadataRef Type);
2142 }
2143 
2144 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2145 	LLVMMetadataRef LLVMDIBuilderCreateNullPtrType(LLVMDIBuilderRef Builder);
2146 }
2147 
2148 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2149 	LLVMMetadataRef LLVMDIBuilderCreateTypedef(LLVMDIBuilderRef Builder, LLVMMetadataRef Type, const(char)* Name, size_t NameLen, LLVMMetadataRef File, uint LineNo, LLVMMetadataRef Scope);
2150 }
2151 
2152 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2153 	LLVMMetadataRef LLVMDIBuilderCreateInheritance(LLVMDIBuilderRef Builder, LLVMMetadataRef Ty, LLVMMetadataRef BaseTy, uint64_t BaseOffset, uint32_t VBPtrOffset, LLVMDIFlags Flags);
2154 }
2155 
2156 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2157 	LLVMMetadataRef LLVMDIBuilderCreateForwardDecl(LLVMDIBuilderRef Builder, uint Tag, const(char)* Name, size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, uint Line, uint RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits, const(char)* UniqueIdentifier, size_t UniqueIdentifierLen);
2158 }
2159 
2160 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2161 	LLVMMetadataRef LLVMDIBuilderCreateReplaceableCompositeType(LLVMDIBuilderRef Builder, uint Tag, const(char)* Name, size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, uint Line, uint RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags, const(char)* UniqueIdentifier, size_t UniqueIdentifierLen);
2162 }
2163 
2164 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2165 	LLVMMetadataRef LLVMDIBuilderCreateBitFieldMemberType(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const(char)* Name, size_t NameLen, LLVMMetadataRef File, uint LineNumber, uint64_t SizeInBits, uint64_t OffsetInBits, uint64_t StorageOffsetInBits, LLVMDIFlags Flags, LLVMMetadataRef Type);
2166 }
2167 
2168 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2169 	LLVMMetadataRef LLVMDIBuilderCreateClassType(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const(char)* Name, size_t NameLen, LLVMMetadataRef File, uint LineNumber, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, LLVMDIFlags Flags, LLVMMetadataRef DerivedFrom, LLVMMetadataRef* Elements, uint NumElements, LLVMMetadataRef VTableHolder, LLVMMetadataRef TemplateParamsNode, const(char)* UniqueIdentifier, size_t UniqueIdentifierLen);
2170 }
2171 
2172 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2173 	LLVMMetadataRef LLVMDIBuilderCreateArtificialType(LLVMDIBuilderRef Builder,LLVMMetadataRef Type);
2174 }
2175 
2176 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2177 	const(char)* LLVMDITypeGetName(LLVMMetadataRef DType, size_t* Length);
2178 }
2179 
2180 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2181 	uint64_t LLVMDITypeGetSizeInBits(LLVMMetadataRef DType);
2182 }
2183 
2184 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2185 	uint64_t LLVMDITypeGetOffsetInBits(LLVMMetadataRef DType);
2186 }
2187 
2188 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2189 	uint32_t LLVMDITypeGetAlignInBits(LLVMMetadataRef DType);
2190 }
2191 
2192 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2193 	uint LLVMDITypeGetLine(LLVMMetadataRef DType);
2194 }
2195 
2196 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2197 	LLVMDIFlags LLVMDITypeGetFlags(LLVMMetadataRef DType);
2198 }
2199 
2200 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2201 	LLVMMetadataRef LLVMDIBuilderGetOrCreateSubrange(LLVMDIBuilderRef Builder, int64_t LowerBound, int64_t Count);
2202 }
2203 
2204 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2205 	LLVMMetadataRef LLVMDIBuilderGetOrCreateArray(LLVMDIBuilderRef Builder, LLVMMetadataRef* Data, size_t NumElements);
2206 }
2207 
2208 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2209 	LLVMMetadataRef LLVMDIBuilderCreateExpression(LLVMDIBuilderRef Builder, int64_t* Addr, size_t Length);
2210 }
2211 
2212 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2213 	LLVMMetadataRef LLVMDIBuilderCreateConstantValueExpression(LLVMDIBuilderRef Builder, int64_t Value);
2214 }
2215 
2216 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2217 	LLVMMetadataRef LLVMDIBuilderCreateGlobalVariableExpression(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const(char)* Name, size_t NameLen, const(char)* Linkage, size_t LinkLen, LLVMMetadataRef File, uint LineNo, LLVMMetadataRef Ty, LLVMBool LocalToUnit, LLVMMetadataRef Expr, LLVMMetadataRef Decl, uint32_t AlignInBits);
2218 }
2219 
2220 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2221 	LLVMMetadataRef LLVMTemporaryMDNode(LLVMContextRef Ctx, LLVMMetadataRef* Data, size_t NumElements);
2222 }
2223 
2224 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2225 	void LLVMDisposeTemporaryMDNode(LLVMMetadataRef TempNode);
2226 }
2227 
2228 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2229 	void LLVMMetadataReplaceAllUsesWith(LLVMMetadataRef TempTargetMetadata, LLVMMetadataRef Replacement);
2230 }
2231 
2232 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2233 	LLVMMetadataRef LLVMDIBuilderCreateTempGlobalVariableFwdDecl(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const(char)* Name, size_t NameLen, const(char)* Linkage, size_t LnkLen, LLVMMetadataRef File, uint LineNo, LLVMMetadataRef Ty, LLVMBool LocalToUnit, LLVMMetadataRef Decl, uint32_t AlignInBits);
2234 }
2235 
2236 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2237 	LLVMValueRef LLVMDIBuilderInsertDeclareBefore(LLVMDIBuilderRef Builder, LLVMValueRef Storage, LLVMMetadataRef VarInfo, LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMValueRef Instr);
2238 }
2239 
2240 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2241 	LLVMValueRef LLVMDIBuilderInsertDeclareAtEnd(LLVMDIBuilderRef Builder, LLVMValueRef Storage, LLVMMetadataRef VarInfo, LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMBasicBlockRef Block);
2242 }
2243 
2244 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2245 	LLVMValueRef LLVMDIBuilderInsertDbgValueBefore(LLVMDIBuilderRef Builder, LLVMValueRef Val, LLVMMetadataRef VarInfo, LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMValueRef Instr);
2246 }
2247 
2248 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2249 	LLVMValueRef LLVMDIBuilderInsertDbgValueAtEnd(LLVMDIBuilderRef Builder, LLVMValueRef Val, LLVMMetadataRef VarInfo, LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMBasicBlockRef Block);
2250 }
2251 
2252 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2253 	LLVMMetadataRef LLVMDIBuilderCreateAutoVariable(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const(char)* Name, size_t NameLen, LLVMMetadataRef File, uint LineNo, LLVMMetadataRef Ty, LLVMBool AlwaysPreserve, LLVMDIFlags Flags, uint32_t AlignInBits);
2254 }
2255 
2256 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2257 	LLVMMetadataRef LLVMDIBuilderCreateParameterVariable(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const(char)* Name, size_t NameLen, uint ArgNo, LLVMMetadataRef File, uint LineNo, LLVMMetadataRef Ty, LLVMBool AlwaysPreserve, LLVMDIFlags Flags);
2258 }
2259 
2260 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2261 	LLVMMetadataRef LLVMGetSubprogram(LLVMValueRef Func);
2262 }
2263 
2264 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2265 	void LLVMSetSubprogram(LLVMValueRef Func, LLVMMetadataRef SP);
2266 }
2267 
2268 
2269 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2270 	LLVMJITEventListenerRef LLVMCreateGDBRegistrationListener();
2271 }
2272 
2273 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2274 	LLVMJITEventListenerRef LLVMCreateIntelJITEventListener();
2275 }
2276 
2277 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2278 	LLVMJITEventListenerRef LLVMCreateOprofileJITEventListener();
2279 }
2280 
2281 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2282 	LLVMJITEventListenerRef LLVMCreatePerfJITEventListener();
2283 }
2284 
2285 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2286 	void LLVMInitializeAggressiveInstCombiner(LLVMPassRegistryRef R);
2287 }
2288 
2289 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2290 	void LLVMOrcRegisterJITEventListener(LLVMOrcJITStackRef JITStack, LLVMJITEventListenerRef L);
2291 }
2292 
2293 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2294 	void LLVMOrcUnregisterJITEventListener(LLVMOrcJITStackRef JITStack, LLVMJITEventListenerRef L);
2295 }
2296 
2297 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2298 	char* LLVMNormalizeTargetTriple(const(char)* triple);
2299 }
2300 
2301 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2302 	char* LLVMGetHostCPUName();
2303 }
2304 
2305 static if (LLVM_Version >= asVersion(7, 0, 0)) {
2306 	char* LLVMGetHostCPUFeatures();
2307 }