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