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