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