llvm_sys_featured/
core.rs

1//! The LLVM intermediate representation.
2
3use super::*;
4
5// Core
6extern "C" {
7    pub fn LLVMShutdown();
8    pub fn LLVMCreateMessage(Message: *const ::libc::c_char) -> *mut ::libc::c_char;
9    pub fn LLVMDisposeMessage(Message: *mut ::libc::c_char);
10}
11
12// Core->Contexts
13extern "C" {
14    pub fn LLVMContextCreate() -> LLVMContextRef;
15    pub fn LLVMGetGlobalContext() -> LLVMContextRef;
16    pub fn LLVMContextSetDiagnosticHandler(
17        C: LLVMContextRef,
18        Handler: LLVMDiagnosticHandler,
19        DiagnosticContext: *mut ::libc::c_void,
20    );
21    /// Get the diagnostic handler of this context.
22    pub fn LLVMContextGetDiagnosticHandler(C: LLVMContextRef) -> LLVMDiagnosticHandler;
23    /// Get the diagnostic context of this context.
24    pub fn LLVMContextGetDiagnosticContext(C: LLVMContextRef) -> *mut ::libc::c_void;
25    pub fn LLVMContextSetYieldCallback(
26        C: LLVMContextRef,
27        Callback: LLVMYieldCallback,
28        OpaqueHandle: *mut ::libc::c_void,
29    );
30    pub fn LLVMContextShouldDiscardValueNames(C: LLVMContextRef) -> LLVMBool;
31    pub fn LLVMContextSetDiscardValueNames(C: LLVMContextRef, Discard: LLVMBool);
32    pub fn LLVMContextDispose(C: LLVMContextRef);
33    pub fn LLVMGetDiagInfoDescription(DI: LLVMDiagnosticInfoRef) -> *mut ::libc::c_char;
34    pub fn LLVMGetDiagInfoSeverity(DI: LLVMDiagnosticInfoRef) -> LLVMDiagnosticSeverity;
35    pub fn LLVMGetMDKindIDInContext(
36        C: LLVMContextRef,
37        Name: *const ::libc::c_char,
38        SLen: ::libc::c_uint,
39    ) -> ::libc::c_uint;
40    pub fn LLVMGetMDKindID(Name: *const ::libc::c_char, SLen: ::libc::c_uint) -> ::libc::c_uint;
41
42    /// Return a unique id given the name of an enum attribute, or 0 if no attribute
43    /// by that name exists.
44    ///
45    /// See http://llvm.org/docs/LangRef.html#parameter-attributes
46    /// and http://llvm.org/docs/LangRef.html#function-attributes
47    /// for the list of available attributes.
48    ///
49    /// Note that attribute names and IDs are not subject to the same stability
50    /// guarantees as this API.
51    pub fn LLVMGetEnumAttributeKindForName(
52        Name: *const ::libc::c_char,
53        SLen: ::libc::size_t,
54    ) -> ::libc::c_uint;
55    pub fn LLVMGetLastEnumAttributeKind() -> ::libc::c_uint;
56
57    /// Create an enum attribute.
58    pub fn LLVMCreateEnumAttribute(
59        C: LLVMContextRef,
60        KindID: ::libc::c_uint,
61        Val: u64,
62    ) -> LLVMAttributeRef;
63    /// Get the unique id corresponding to the provided enum attribute.
64    pub fn LLVMGetEnumAttributeKind(A: LLVMAttributeRef) -> ::libc::c_uint;
65    /// Get the value of an enum attribute.
66    ///
67    /// Returns 0 if none exists.
68    pub fn LLVMGetEnumAttributeValue(A: LLVMAttributeRef) -> u64;
69    /// Create a string attribute.
70    pub fn LLVMCreateStringAttribute(
71        C: LLVMContextRef,
72        K: *const ::libc::c_char,
73        KLength: ::libc::c_uint,
74        V: *const ::libc::c_char,
75        VLength: ::libc::c_uint,
76    ) -> LLVMAttributeRef;
77    /// Get a string attribute's kind.
78    pub fn LLVMGetStringAttributeKind(
79        A: LLVMAttributeRef,
80        Length: *mut ::libc::c_uint,
81    ) -> *const ::libc::c_char;
82    /// Get a string attribute's value.
83    pub fn LLVMGetStringAttributeValue(
84        A: LLVMAttributeRef,
85        Length: *mut ::libc::c_uint,
86    ) -> *const ::libc::c_char;
87    pub fn LLVMIsEnumAttribute(A: LLVMAttributeRef) -> LLVMBool;
88    pub fn LLVMIsStringAttribute(A: LLVMAttributeRef) -> LLVMBool;
89}
90
91// Core->Modules
92extern "C" {
93    pub fn LLVMModuleCreateWithName(ModuleID: *const ::libc::c_char) -> LLVMModuleRef;
94    pub fn LLVMModuleCreateWithNameInContext(
95        ModuleID: *const ::libc::c_char,
96        C: LLVMContextRef,
97    ) -> LLVMModuleRef;
98    pub fn LLVMCloneModule(M: LLVMModuleRef) -> LLVMModuleRef;
99    pub fn LLVMDisposeModule(M: LLVMModuleRef);
100    /// Get the identifier of a module.
101    ///
102    /// `Len` is written to contains the length of the returned string.
103    pub fn LLVMGetModuleIdentifier(
104        M: LLVMModuleRef,
105        Len: *mut ::libc::size_t,
106    ) -> *const ::libc::c_char;
107    /// Set the identifier of a module.
108    ///
109    /// `Len` is the length of the string pointed to by `Ident`.
110    pub fn LLVMSetModuleIdentifier(
111        M: LLVMModuleRef,
112        Ident: *const ::libc::c_char,
113        Len: ::libc::size_t,
114    );
115
116    /// Obtain the module's original source file name.
117    ///
118    /// Len holds the length of the returned string, returns the original source file name of M.
119    pub fn LLVMGetSourceFileName(
120        M: LLVMModuleRef,
121        Len: *mut ::libc::size_t,
122    ) -> *const ::libc::c_char;
123    /// Set the original source file name of a module to a string Name with length Len.
124    pub fn LLVMSetSourceFileName(
125        M: LLVMModuleRef,
126        Name: *const ::libc::c_char,
127        Len: ::libc::size_t,
128    );
129
130    #[deprecated(since = "3.9", note = "Confusingly named. Use LLVMGetDataLayoutStr.")]
131    pub fn LLVMGetDataLayout(M: LLVMModuleRef) -> *const ::libc::c_char;
132    /// Obtain the data layout for a module.
133    pub fn LLVMGetDataLayoutStr(M: LLVMModuleRef) -> *const ::libc::c_char;
134    pub fn LLVMSetDataLayout(M: LLVMModuleRef, DataLayoutStr: *const ::libc::c_char);
135    pub fn LLVMGetTarget(M: LLVMModuleRef) -> *const ::libc::c_char;
136    pub fn LLVMSetTarget(M: LLVMModuleRef, Triple: *const ::libc::c_char);
137
138    /// Returns the module flags as an array of flag-key-value triples.  The caller is responsible for freeing this array by calling LLVMDisposeModuleFlagsMetadata.
139    pub fn LLVMCopyModuleFlagsMetadata(
140        M: LLVMModuleRef,
141        Len: *mut ::libc::size_t,
142    ) -> *mut LLVMModuleFlagEntry;
143    /// Destroys module flags metadata entries.
144    pub fn LLVMDisposeModuleFlagsMetadata(Entries: *mut LLVMModuleFlagEntry);
145    /// Returns the flag behavior for a module flag entry at a specific index.
146    pub fn LLVMModuleFlagEntriesGetFlagBehavior(
147        Entries: *mut LLVMModuleFlagEntry,
148        Index: ::libc::c_uint,
149    ) -> LLVMModuleFlagBehavior;
150    /// Returns the key for a module flag entry at a specific index.
151    pub fn LLVMModuleFlagEntriesGetKey(
152        Entries: *mut LLVMModuleFlagEntry,
153        Index: ::libc::c_uint,
154        Len: *mut ::libc::size_t,
155    ) -> *const ::libc::c_char;
156    /// Returns the metadata for a module flag entry at a specific index.
157    pub fn LLVMModuleFlagEntriesGetMetadata(
158        Entries: *mut LLVMModuleFlagEntry,
159        Index: ::libc::c_uint,
160    ) -> LLVMMetadataRef;
161    /// Add a module-level flag to the module-level flags metadata if it doesn't already exist.
162    pub fn LLVMGetModuleFlag(
163        M: LLVMModuleRef,
164        Key: *const ::libc::c_char,
165        KeyLen: ::libc::size_t,
166    ) -> LLVMMetadataRef;
167    /// Add a module-level flag to the module-level flags metadata if it doesn't already exist.
168    pub fn LLVMAddModuleFlag(
169        M: LLVMModuleRef,
170        Behavior: LLVMModuleFlagBehavior,
171        Key: *const ::libc::c_char,
172        KeyLen: ::libc::size_t,
173        Val: LLVMMetadataRef,
174    );
175
176    pub fn LLVMDumpModule(M: LLVMModuleRef);
177    pub fn LLVMPrintModuleToFile(
178        M: LLVMModuleRef,
179        Filename: *const ::libc::c_char,
180        ErrorMessage: *mut *mut ::libc::c_char,
181    ) -> LLVMBool;
182    pub fn LLVMPrintModuleToString(M: LLVMModuleRef) -> *mut ::libc::c_char;
183
184    pub fn LLVMGetModuleInlineAsm(
185        M: LLVMModuleRef,
186        Len: *mut ::libc::size_t,
187    ) -> *const ::libc::c_char;
188    #[deprecated(since = "7.0", note = "Use LLVMSetModuleInlineAsm2 instead")]
189    pub fn LLVMSetModuleInlineAsm(M: LLVMModuleRef, Asm: *const ::libc::c_char);
190    pub fn LLVMSetModuleInlineAsm2(
191        M: LLVMModuleRef,
192        Asm: *const ::libc::c_char,
193        Len: ::libc::size_t,
194    );
195    pub fn LLVMAppendModuleInlineAsm(
196        M: LLVMModuleRef,
197        Asm: *const ::libc::c_char,
198        Len: ::libc::size_t,
199    );
200    pub fn LLVMGetInlineAsm(
201        Ty: LLVMTypeRef,
202        AsmString: *mut ::libc::c_char,
203        AsmStringSize: ::libc::size_t,
204        Constraints: *mut ::libc::c_char,
205        ConstraintsSize: ::libc::size_t,
206        HasSideEffects: LLVMBool,
207        IsAlignStack: LLVMBool,
208        Dialect: LLVMInlineAsmDialect,
209    ) -> LLVMValueRef;
210
211    pub fn LLVMGetModuleContext(M: LLVMModuleRef) -> LLVMContextRef;
212    pub fn LLVMGetTypeByName(M: LLVMModuleRef, Name: *const ::libc::c_char) -> LLVMTypeRef;
213    pub fn LLVMGetFirstNamedMetadata(M: LLVMModuleRef) -> LLVMNamedMDNodeRef;
214    pub fn LLVMGetLastNamedMetadata(M: LLVMModuleRef) -> LLVMNamedMDNodeRef;
215    pub fn LLVMGetNextNamedMetadata(NamedMDNode: LLVMNamedMDNodeRef) -> LLVMNamedMDNodeRef;
216    pub fn LLVMGetPreviousNamedMetadata(NamedMDNode: LLVMNamedMDNodeRef) -> LLVMNamedMDNodeRef;
217    pub fn LLVMGetNamedMetadata(
218        M: LLVMModuleRef,
219        Name: *const ::libc::c_char,
220        NameLen: ::libc::size_t,
221    ) -> LLVMNamedMDNodeRef;
222    pub fn LLVMGetOrInsertNamedMetadata(
223        M: LLVMModuleRef,
224        Name: *const ::libc::c_char,
225        NameLen: ::libc::size_t,
226    ) -> LLVMNamedMDNodeRef;
227    pub fn LLVMGetNamedMetadataName(
228        NamedMD: LLVMNamedMDNodeRef,
229        NameLen: *const ::libc::size_t,
230    ) -> *const ::libc::c_char;
231    pub fn LLVMGetNamedMetadataNumOperands(
232        M: LLVMModuleRef,
233        name: *const ::libc::c_char,
234    ) -> ::libc::c_uint;
235    pub fn LLVMGetNamedMetadataOperands(
236        M: LLVMModuleRef,
237        name: *const ::libc::c_char,
238        Dest: *mut LLVMValueRef,
239    );
240    pub fn LLVMAddNamedMetadataOperand(
241        M: LLVMModuleRef,
242        name: *const ::libc::c_char,
243        Val: LLVMValueRef,
244    );
245    pub fn LLVMGetDebugLocDirectory(
246        Val: LLVMValueRef,
247        Length: *mut ::libc::c_uint,
248    ) -> *const ::libc::c_char;
249    pub fn LLVMGetDebugLocFilename(
250        Val: LLVMValueRef,
251        Length: *mut ::libc::c_uint,
252    ) -> *const ::libc::c_char;
253    pub fn LLVMGetDebugLocLine(Val: LLVMValueRef) -> ::libc::c_uint;
254    pub fn LLVMGetDebugLocColumn(Val: LLVMValueRef) -> ::libc::c_uint;
255    pub fn LLVMAddFunction(
256        M: LLVMModuleRef,
257        Name: *const ::libc::c_char,
258        FunctionTy: LLVMTypeRef,
259    ) -> LLVMValueRef;
260    pub fn LLVMGetNamedFunction(M: LLVMModuleRef, Name: *const ::libc::c_char) -> LLVMValueRef;
261    pub fn LLVMGetFirstFunction(M: LLVMModuleRef) -> LLVMValueRef;
262    pub fn LLVMGetLastFunction(M: LLVMModuleRef) -> LLVMValueRef;
263    pub fn LLVMGetNextFunction(Fn: LLVMValueRef) -> LLVMValueRef;
264    pub fn LLVMGetPreviousFunction(Fn: LLVMValueRef) -> LLVMValueRef;
265}
266
267// Core->Types
268extern "C" {
269    pub fn LLVMGetTypeKind(Ty: LLVMTypeRef) -> LLVMTypeKind;
270    pub fn LLVMTypeIsSized(Ty: LLVMTypeRef) -> LLVMBool;
271    pub fn LLVMGetTypeContext(Ty: LLVMTypeRef) -> LLVMContextRef;
272    pub fn LLVMDumpType(Val: LLVMTypeRef);
273    pub fn LLVMPrintTypeToString(Val: LLVMTypeRef) -> *mut ::libc::c_char;
274
275    // Core->Types->Integer
276    pub fn LLVMInt1TypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
277    pub fn LLVMInt8TypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
278    pub fn LLVMInt16TypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
279    pub fn LLVMInt32TypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
280    pub fn LLVMInt64TypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
281    pub fn LLVMInt128TypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
282    pub fn LLVMIntTypeInContext(C: LLVMContextRef, NumBits: ::libc::c_uint) -> LLVMTypeRef;
283    pub fn LLVMInt1Type() -> LLVMTypeRef;
284    pub fn LLVMInt8Type() -> LLVMTypeRef;
285    pub fn LLVMInt16Type() -> LLVMTypeRef;
286    pub fn LLVMInt32Type() -> LLVMTypeRef;
287    pub fn LLVMInt64Type() -> LLVMTypeRef;
288    pub fn LLVMInt128Type() -> LLVMTypeRef;
289    pub fn LLVMIntType(NumBits: ::libc::c_uint) -> LLVMTypeRef;
290    pub fn LLVMGetIntTypeWidth(IntegerTy: LLVMTypeRef) -> ::libc::c_uint;
291
292    // Core->Types->Floating-Point
293    pub fn LLVMHalfTypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
294    pub fn LLVMFloatTypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
295    pub fn LLVMDoubleTypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
296    pub fn LLVMX86FP80TypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
297    pub fn LLVMFP128TypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
298    pub fn LLVMPPCFP128TypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
299    pub fn LLVMHalfType() -> LLVMTypeRef;
300    pub fn LLVMFloatType() -> LLVMTypeRef;
301    pub fn LLVMDoubleType() -> LLVMTypeRef;
302    pub fn LLVMX86FP80Type() -> LLVMTypeRef;
303    pub fn LLVMFP128Type() -> LLVMTypeRef;
304    pub fn LLVMPPCFP128Type() -> LLVMTypeRef;
305
306    // Core->Types->Function
307    pub fn LLVMFunctionType(
308        ReturnType: LLVMTypeRef,
309        ParamTypes: *mut LLVMTypeRef,
310        ParamCount: ::libc::c_uint,
311        IsVarArg: LLVMBool,
312    ) -> LLVMTypeRef;
313    pub fn LLVMIsFunctionVarArg(FunctionTy: LLVMTypeRef) -> LLVMBool;
314    pub fn LLVMGetReturnType(FunctionTy: LLVMTypeRef) -> LLVMTypeRef;
315    pub fn LLVMCountParamTypes(FunctionTy: LLVMTypeRef) -> ::libc::c_uint;
316    pub fn LLVMGetParamTypes(FunctionTy: LLVMTypeRef, Dest: *mut LLVMTypeRef);
317
318    // Core->Types->Struct
319    pub fn LLVMStructTypeInContext(
320        C: LLVMContextRef,
321        ElementTypes: *mut LLVMTypeRef,
322        ElementCount: ::libc::c_uint,
323        Packed: LLVMBool,
324    ) -> LLVMTypeRef;
325    pub fn LLVMStructType(
326        ElementTypes: *mut LLVMTypeRef,
327        ElementCount: ::libc::c_uint,
328        Packed: LLVMBool,
329    ) -> LLVMTypeRef;
330    pub fn LLVMStructCreateNamed(C: LLVMContextRef, Name: *const ::libc::c_char) -> LLVMTypeRef;
331    pub fn LLVMGetStructName(Ty: LLVMTypeRef) -> *const ::libc::c_char;
332    pub fn LLVMStructSetBody(
333        StructTy: LLVMTypeRef,
334        ElementTypes: *mut LLVMTypeRef,
335        ElementCount: ::libc::c_uint,
336        Packed: LLVMBool,
337    );
338    pub fn LLVMCountStructElementTypes(StructTy: LLVMTypeRef) -> ::libc::c_uint;
339    pub fn LLVMGetStructElementTypes(StructTy: LLVMTypeRef, Dest: *mut LLVMTypeRef);
340    /// Get the type of the element at the given index in a structure.
341    ///
342    /// Added in LLVM 3.7.
343    pub fn LLVMStructGetTypeAtIndex(StructTy: LLVMTypeRef, i: ::libc::c_uint) -> LLVMTypeRef;
344    /// Determine whether a structure is packed.
345    pub fn LLVMIsPackedStruct(StructTy: LLVMTypeRef) -> LLVMBool;
346    pub fn LLVMIsOpaqueStruct(StructTy: LLVMTypeRef) -> LLVMBool;
347    pub fn LLVMIsLiteralStruct(StructTy: LLVMTypeRef) -> LLVMBool;
348
349    // Core->Types->Sequential
350    pub fn LLVMGetElementType(Ty: LLVMTypeRef) -> LLVMTypeRef;
351    /// Get the subtypes of the given type.
352    pub fn LLVMGetSubtypes(Tp: LLVMTypeRef, Arr: *mut LLVMTypeRef);
353    /// Return the number of types in the derived type.
354    pub fn LLVMGetNumContainedTypes(Tp: LLVMTypeRef) -> ::libc::c_uint;
355    pub fn LLVMArrayType(ElementType: LLVMTypeRef, ElementCount: ::libc::c_uint) -> LLVMTypeRef;
356    pub fn LLVMGetArrayLength(ArrayTy: LLVMTypeRef) -> ::libc::c_uint;
357    pub fn LLVMPointerType(ElementType: LLVMTypeRef, AddressSpace: ::libc::c_uint) -> LLVMTypeRef;
358    pub fn LLVMGetPointerAddressSpace(PointerTy: LLVMTypeRef) -> ::libc::c_uint;
359    pub fn LLVMVectorType(ElementType: LLVMTypeRef, ElementCount: ::libc::c_uint) -> LLVMTypeRef;
360    pub fn LLVMGetVectorSize(VectorTy: LLVMTypeRef) -> ::libc::c_uint;
361
362    // Core->Types->Other
363    pub fn LLVMVoidTypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
364    pub fn LLVMLabelTypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
365    pub fn LLVMX86MMXTypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
366    pub fn LLVMTokenTypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
367    pub fn LLVMMetadataTypeInContext(C: LLVMContextRef) -> LLVMTypeRef;
368    pub fn LLVMVoidType() -> LLVMTypeRef;
369    pub fn LLVMLabelType() -> LLVMTypeRef;
370    pub fn LLVMX86MMXType() -> LLVMTypeRef;
371}
372
373// Core->Values
374extern "C" {
375    // Core->Values->General
376    // Get the enumerated kind of a Value instance.
377    pub fn LLVMGetValueKind(Val: LLVMValueRef) -> LLVMValueKind;
378    pub fn LLVMTypeOf(Val: LLVMValueRef) -> LLVMTypeRef;
379
380    #[deprecated(since = "7.0", note = "Use LLVMGetValueName2 instead")]
381    pub fn LLVMGetValueName(Val: LLVMValueRef) -> *const ::libc::c_char;
382    pub fn LLVMGetValueName2(
383        Val: LLVMValueRef,
384        Length: *mut ::libc::size_t,
385    ) -> *const ::libc::c_char;
386    #[deprecated(since = "7.0", note = "Use LLVMSetValueName2 instead")]
387    pub fn LLVMSetValueName(Val: LLVMValueRef, Name: *const ::libc::c_char);
388    pub fn LLVMSetValueName2(
389        Val: LLVMValueRef,
390        Name: *const ::libc::c_char,
391        NameLen: ::libc::size_t,
392    );
393
394    pub fn LLVMDumpValue(Val: LLVMValueRef);
395    pub fn LLVMPrintValueToString(Val: LLVMValueRef) -> *mut ::libc::c_char;
396    pub fn LLVMReplaceAllUsesWith(OldVal: LLVMValueRef, NewVal: LLVMValueRef);
397    /// Determine whether the specified value instance is constant.
398    pub fn LLVMIsConstant(Val: LLVMValueRef) -> LLVMBool;
399    pub fn LLVMIsUndef(Val: LLVMValueRef) -> LLVMBool;
400    pub fn LLVMIsAMDNode(Val: LLVMValueRef) -> LLVMValueRef;
401    pub fn LLVMIsAMDString(Val: LLVMValueRef) -> LLVMValueRef;
402
403    // Core->Values->Usage
404    pub fn LLVMGetFirstUse(Val: LLVMValueRef) -> LLVMUseRef;
405    pub fn LLVMGetNextUse(U: LLVMUseRef) -> LLVMUseRef;
406    pub fn LLVMGetUser(U: LLVMUseRef) -> LLVMValueRef;
407    pub fn LLVMGetUsedValue(U: LLVMUseRef) -> LLVMValueRef;
408
409    // Core->Values->User value
410    pub fn LLVMGetOperand(Val: LLVMValueRef, Index: ::libc::c_uint) -> LLVMValueRef;
411    pub fn LLVMGetOperandUse(Val: LLVMValueRef, Index: ::libc::c_uint) -> LLVMUseRef;
412    pub fn LLVMSetOperand(User: LLVMValueRef, Index: ::libc::c_uint, Val: LLVMValueRef);
413    pub fn LLVMGetNumOperands(Val: LLVMValueRef) -> ::libc::c_int;
414
415    // Core->Values->Constants
416    pub fn LLVMConstNull(Ty: LLVMTypeRef) -> LLVMValueRef;
417    pub fn LLVMConstAllOnes(Ty: LLVMTypeRef) -> LLVMValueRef;
418    pub fn LLVMGetUndef(Ty: LLVMTypeRef) -> LLVMValueRef;
419    pub fn LLVMIsNull(Val: LLVMValueRef) -> LLVMBool;
420    pub fn LLVMConstPointerNull(Ty: LLVMTypeRef) -> LLVMValueRef;
421
422    // Core->Values->Constants->Scalar
423    pub fn LLVMConstInt(
424        IntTy: LLVMTypeRef,
425        N: ::libc::c_ulonglong,
426        SignExtend: LLVMBool,
427    ) -> LLVMValueRef;
428    pub fn LLVMConstIntOfArbitraryPrecision(
429        IntTy: LLVMTypeRef,
430        NumWords: ::libc::c_uint,
431        Words: *const u64,
432    ) -> LLVMValueRef;
433    pub fn LLVMConstIntOfString(
434        IntTy: LLVMTypeRef,
435        Text: *const ::libc::c_char,
436        Radix: u8,
437    ) -> LLVMValueRef;
438    pub fn LLVMConstIntOfStringAndSize(
439        IntTy: LLVMTypeRef,
440        Text: *const ::libc::c_char,
441        SLen: ::libc::c_uint,
442        Radix: u8,
443    ) -> LLVMValueRef;
444    pub fn LLVMConstReal(RealTy: LLVMTypeRef, N: ::libc::c_double) -> LLVMValueRef;
445    pub fn LLVMConstRealOfString(RealTy: LLVMTypeRef, Text: *const ::libc::c_char) -> LLVMValueRef;
446    pub fn LLVMConstRealOfStringAndSize(
447        RealTy: LLVMTypeRef,
448        Text: *const ::libc::c_char,
449        SLen: ::libc::c_uint,
450    ) -> LLVMValueRef;
451    pub fn LLVMConstIntGetZExtValue(ConstantVal: LLVMValueRef) -> ::libc::c_ulonglong;
452    pub fn LLVMConstIntGetSExtValue(ConstantVal: LLVMValueRef) -> ::libc::c_longlong;
453    pub fn LLVMConstRealGetDouble(
454        ConstantVal: LLVMValueRef,
455        losesInfo: *mut LLVMBool,
456    ) -> ::libc::c_double;
457
458    // Core->Values->Constants->Composite
459    pub fn LLVMConstStringInContext(
460        C: LLVMContextRef,
461        Str: *const ::libc::c_char,
462        Length: ::libc::c_uint,
463        DontNullTerminate: LLVMBool,
464    ) -> LLVMValueRef;
465    pub fn LLVMConstString(
466        Str: *const ::libc::c_char,
467        Length: ::libc::c_uint,
468        DontNullTerminate: LLVMBool,
469    ) -> LLVMValueRef;
470    pub fn LLVMIsConstantString(c: LLVMValueRef) -> LLVMBool;
471    pub fn LLVMGetAsString(C: LLVMValueRef, Length: *mut ::libc::size_t) -> *const ::libc::c_char;
472    pub fn LLVMConstStructInContext(
473        C: LLVMContextRef,
474        ConstantVals: *mut LLVMValueRef,
475        Count: ::libc::c_uint,
476        Packed: LLVMBool,
477    ) -> LLVMValueRef;
478    pub fn LLVMConstStruct(
479        ConstantVals: *mut LLVMValueRef,
480        Count: ::libc::c_uint,
481        Packed: LLVMBool,
482    ) -> LLVMValueRef;
483    pub fn LLVMConstArray(
484        ElementTy: LLVMTypeRef,
485        ConstantVals: *mut LLVMValueRef,
486        Length: ::libc::c_uint,
487    ) -> LLVMValueRef;
488    pub fn LLVMConstNamedStruct(
489        StructTy: LLVMTypeRef,
490        ConstantVals: *mut LLVMValueRef,
491        Count: ::libc::c_uint,
492    ) -> LLVMValueRef;
493    pub fn LLVMGetElementAsConstant(C: LLVMValueRef, idx: ::libc::c_uint) -> LLVMValueRef;
494    pub fn LLVMConstVector(
495        ScalarConstantVals: *mut LLVMValueRef,
496        Size: ::libc::c_uint,
497    ) -> LLVMValueRef;
498
499    // Core->Values->Constants->Constant expressions
500    pub fn LLVMGetConstOpcode(ConstantVal: LLVMValueRef) -> LLVMOpcode;
501    pub fn LLVMAlignOf(Ty: LLVMTypeRef) -> LLVMValueRef;
502    pub fn LLVMSizeOf(Ty: LLVMTypeRef) -> LLVMValueRef;
503    pub fn LLVMConstNeg(ConstantVal: LLVMValueRef) -> LLVMValueRef;
504    pub fn LLVMConstNSWNeg(ConstantVal: LLVMValueRef) -> LLVMValueRef;
505    pub fn LLVMConstNUWNeg(ConstantVal: LLVMValueRef) -> LLVMValueRef;
506    pub fn LLVMConstFNeg(ConstantVal: LLVMValueRef) -> LLVMValueRef;
507    pub fn LLVMConstNot(ConstantVal: LLVMValueRef) -> LLVMValueRef;
508    pub fn LLVMConstAdd(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
509    pub fn LLVMConstNSWAdd(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
510    pub fn LLVMConstNUWAdd(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
511    pub fn LLVMConstFAdd(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
512    pub fn LLVMConstSub(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
513    pub fn LLVMConstNSWSub(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
514    pub fn LLVMConstNUWSub(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
515    pub fn LLVMConstFSub(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
516    pub fn LLVMConstMul(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
517    pub fn LLVMConstNSWMul(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
518    pub fn LLVMConstNUWMul(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
519    pub fn LLVMConstFMul(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
520    pub fn LLVMConstUDiv(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
521    pub fn LLVMConstExactUDiv(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef)
522        -> LLVMValueRef;
523    pub fn LLVMConstSDiv(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
524    pub fn LLVMConstExactSDiv(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef)
525        -> LLVMValueRef;
526    pub fn LLVMConstFDiv(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
527    pub fn LLVMConstURem(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
528    pub fn LLVMConstSRem(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
529    pub fn LLVMConstFRem(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
530    pub fn LLVMConstAnd(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
531    pub fn LLVMConstOr(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
532    pub fn LLVMConstXor(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
533    pub fn LLVMConstICmp(
534        Predicate: LLVMIntPredicate,
535        LHSConstant: LLVMValueRef,
536        RHSConstant: LLVMValueRef,
537    ) -> LLVMValueRef;
538    pub fn LLVMConstFCmp(
539        Predicate: LLVMRealPredicate,
540        LHSConstant: LLVMValueRef,
541        RHSConstant: LLVMValueRef,
542    ) -> LLVMValueRef;
543    pub fn LLVMConstShl(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
544    pub fn LLVMConstLShr(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
545    pub fn LLVMConstAShr(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef) -> LLVMValueRef;
546    pub fn LLVMConstGEP(
547        ConstantVal: LLVMValueRef,
548        ConstantIndices: *mut LLVMValueRef,
549        NumIndices: ::libc::c_uint,
550    ) -> LLVMValueRef;
551    pub fn LLVMConstGEP2(
552        Ty: LLVMTypeRef,
553        ConstantVal: LLVMValueRef,
554        ConstantIndices: *mut LLVMValueRef,
555        NumIndices: ::libc::c_uint,
556    ) -> LLVMValueRef;
557    pub fn LLVMConstInBoundsGEP(
558        ConstantVal: LLVMValueRef,
559        ConstantIndices: *mut LLVMValueRef,
560        NumIndices: ::libc::c_uint,
561    ) -> LLVMValueRef;
562    pub fn LLVMConstInBoundsGEP2(
563        Ty: LLVMTypeRef,
564        ConstantVal: LLVMValueRef,
565        ConstantIndices: *mut LLVMValueRef,
566        NumIndices: ::libc::c_uint,
567    ) -> LLVMValueRef;
568    pub fn LLVMConstTrunc(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
569    pub fn LLVMConstSExt(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
570    pub fn LLVMConstZExt(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
571    pub fn LLVMConstFPTrunc(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
572    pub fn LLVMConstFPExt(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
573    pub fn LLVMConstUIToFP(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
574    pub fn LLVMConstSIToFP(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
575    pub fn LLVMConstFPToUI(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
576    pub fn LLVMConstFPToSI(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
577    pub fn LLVMConstPtrToInt(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
578    pub fn LLVMConstIntToPtr(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
579    pub fn LLVMConstBitCast(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
580    pub fn LLVMConstAddrSpaceCast(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
581    pub fn LLVMConstZExtOrBitCast(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
582    pub fn LLVMConstSExtOrBitCast(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
583    pub fn LLVMConstTruncOrBitCast(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
584    pub fn LLVMConstPointerCast(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
585    pub fn LLVMConstIntCast(
586        ConstantVal: LLVMValueRef,
587        ToType: LLVMTypeRef,
588        isSigned: LLVMBool,
589    ) -> LLVMValueRef;
590    pub fn LLVMConstFPCast(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef) -> LLVMValueRef;
591    pub fn LLVMConstSelect(
592        ConstantCondition: LLVMValueRef,
593        ConstantIfTrue: LLVMValueRef,
594        ConstantIfFalse: LLVMValueRef,
595    ) -> LLVMValueRef;
596    pub fn LLVMConstExtractElement(
597        VectorConstant: LLVMValueRef,
598        IndexConstant: LLVMValueRef,
599    ) -> LLVMValueRef;
600    pub fn LLVMConstInsertElement(
601        VectorConstant: LLVMValueRef,
602        ElementValueConstant: LLVMValueRef,
603        IndexConstant: LLVMValueRef,
604    ) -> LLVMValueRef;
605    pub fn LLVMConstShuffleVector(
606        VectorAConstant: LLVMValueRef,
607        VectorBConstant: LLVMValueRef,
608        MaskConstant: LLVMValueRef,
609    ) -> LLVMValueRef;
610    pub fn LLVMConstExtractValue(
611        AggConstant: LLVMValueRef,
612        IdxList: *mut ::libc::c_uint,
613        NumIdx: ::libc::c_uint,
614    ) -> LLVMValueRef;
615    pub fn LLVMConstInsertValue(
616        AggConstant: LLVMValueRef,
617        ElementValueConstant: LLVMValueRef,
618        IdxList: *mut ::libc::c_uint,
619        NumIdx: ::libc::c_uint,
620    ) -> LLVMValueRef;
621    #[deprecated(since = "7.0", note = "Use LLVMGetInlineAsm instead")]
622    pub fn LLVMConstInlineAsm(
623        Ty: LLVMTypeRef,
624        AsmString: *const ::libc::c_char,
625        Constraints: *const ::libc::c_char,
626        HasSideEffects: LLVMBool,
627        IsAlignStack: LLVMBool,
628    ) -> LLVMValueRef;
629    pub fn LLVMBlockAddress(F: LLVMValueRef, BB: LLVMBasicBlockRef) -> LLVMValueRef;
630
631    // Core->Values->Constants->Global Values
632    pub fn LLVMGetGlobalParent(Global: LLVMValueRef) -> LLVMModuleRef;
633    pub fn LLVMIsDeclaration(Global: LLVMValueRef) -> LLVMBool;
634    pub fn LLVMGetLinkage(Global: LLVMValueRef) -> LLVMLinkage;
635    pub fn LLVMSetLinkage(Global: LLVMValueRef, Linkage: LLVMLinkage);
636    pub fn LLVMGetSection(Global: LLVMValueRef) -> *const ::libc::c_char;
637    pub fn LLVMSetSection(Global: LLVMValueRef, Section: *const ::libc::c_char);
638    pub fn LLVMGetVisibility(Global: LLVMValueRef) -> LLVMVisibility;
639    pub fn LLVMSetVisibility(Global: LLVMValueRef, Viz: LLVMVisibility);
640    pub fn LLVMGetDLLStorageClass(Global: LLVMValueRef) -> LLVMDLLStorageClass;
641    pub fn LLVMSetDLLStorageClass(Global: LLVMValueRef, Class: LLVMDLLStorageClass);
642
643    pub fn LLVMGetUnnamedAddress(Global: LLVMValueRef) -> LLVMUnnamedAddr;
644    pub fn LLVMSetUnnamedAddress(Global: LLVMValueRef, UnnamedAddr: LLVMUnnamedAddr);
645    pub fn LLVMGlobalGetValueType(Global: LLVMValueRef) -> LLVMTypeRef;
646    #[deprecated(since = "7.0", note = "Use LLVMGetUnnamedAddress instead")]
647    pub fn LLVMHasUnnamedAddr(Global: LLVMValueRef) -> LLVMBool;
648    #[deprecated(since = "7.0", note = "Use LLVMSetUnnamedAddress instead")]
649    pub fn LLVMSetUnnamedAddr(Global: LLVMValueRef, HasUnnamedAddr: LLVMBool);
650
651    pub fn LLVMGetAlignment(V: LLVMValueRef) -> ::libc::c_uint;
652    pub fn LLVMSetAlignment(V: LLVMValueRef, Bytes: ::libc::c_uint);
653
654    pub fn LLVMGlobalSetMetadata(Global: LLVMValueRef, Kind: ::libc::c_uint, MD: LLVMMetadataRef);
655    pub fn LLVMGlobalEraseMetadata(Global: LLVMValueRef, Kind: ::libc::c_uint);
656    pub fn LLVMGlobalClearMetadata(Global: LLVMValueRef);
657    pub fn LLVMGlobalCopyAllMetadata(
658        Value: LLVMValueRef,
659        NumEntries: *mut ::libc::size_t,
660    ) -> *mut LLVMValueMetadataEntry;
661    pub fn LLVMDisposeValueMetadataEntries(Entries: *mut LLVMValueMetadataEntry);
662    pub fn LLVMValueMetadataEntriesGetKind(
663        Entries: *mut LLVMValueMetadataEntry,
664        Index: ::libc::c_uint,
665    ) -> ::libc::c_uint;
666    pub fn LLVMValueMetadataEntriesGetMetadata(
667        Entries: *mut LLVMValueMetadataEntry,
668        Index: ::libc::c_uint,
669    ) -> LLVMMetadataRef;
670
671    // Core->Values->Constants->Global Variables
672    pub fn LLVMAddGlobal(
673        M: LLVMModuleRef,
674        Ty: LLVMTypeRef,
675        Name: *const ::libc::c_char,
676    ) -> LLVMValueRef;
677    pub fn LLVMAddGlobalInAddressSpace(
678        M: LLVMModuleRef,
679        Ty: LLVMTypeRef,
680        Name: *const ::libc::c_char,
681        AddressSpace: ::libc::c_uint,
682    ) -> LLVMValueRef;
683    pub fn LLVMGetNamedGlobal(M: LLVMModuleRef, Name: *const ::libc::c_char) -> LLVMValueRef;
684    pub fn LLVMGetFirstGlobal(M: LLVMModuleRef) -> LLVMValueRef;
685    pub fn LLVMGetLastGlobal(M: LLVMModuleRef) -> LLVMValueRef;
686    pub fn LLVMGetNextGlobal(GlobalVar: LLVMValueRef) -> LLVMValueRef;
687    pub fn LLVMGetPreviousGlobal(GlobalVar: LLVMValueRef) -> LLVMValueRef;
688    pub fn LLVMDeleteGlobal(GlobalVar: LLVMValueRef);
689    pub fn LLVMGetInitializer(GlobalVar: LLVMValueRef) -> LLVMValueRef;
690    pub fn LLVMSetInitializer(GlobalVar: LLVMValueRef, ConstantVal: LLVMValueRef);
691    pub fn LLVMIsThreadLocal(GlobalVar: LLVMValueRef) -> LLVMBool;
692    pub fn LLVMSetThreadLocal(GlobalVar: LLVMValueRef, IsThreadLocal: LLVMBool);
693    pub fn LLVMIsGlobalConstant(GlobalVar: LLVMValueRef) -> LLVMBool;
694    pub fn LLVMSetGlobalConstant(GlobalVar: LLVMValueRef, IsConstant: LLVMBool);
695    pub fn LLVMGetThreadLocalMode(GlobalVar: LLVMValueRef) -> LLVMThreadLocalMode;
696    pub fn LLVMSetThreadLocalMode(GlobalVar: LLVMValueRef, Mode: LLVMThreadLocalMode);
697    pub fn LLVMIsExternallyInitialized(GlobalVar: LLVMValueRef) -> LLVMBool;
698    pub fn LLVMSetExternallyInitialized(GlobalVar: LLVMValueRef, IsExtInit: LLVMBool);
699
700    // Core->Values->Constants->Global Aliases
701    /// Obtain a GlobalAlias value from a Module by its name.
702    ///
703    /// The returned value corresponds to a llvm::GlobalAlias value.
704    pub fn LLVMGetNamedGlobalAlias(
705        M: LLVMModuleRef,
706        Name: *const ::libc::c_char,
707        NameLen: ::libc::size_t,
708    ) -> LLVMValueRef;
709    /// Obtain an iterator to the first GlobalAlias in a Module.
710    pub fn LLVMGetFirstGlobalAlias(M: LLVMModuleRef) -> LLVMValueRef;
711    /// Obtain an iterator to the last GlobalAlias in a Module.
712    pub fn LLVMGetLastGlobalAlias(M: LLVMModuleRef) -> LLVMValueRef;
713    /// Advance a GlobalAlias iterator to the next GlobalAlias.
714    ///
715    /// Returns NULL if the iterator was already at the end and there are no more global aliases.
716    pub fn LLVMGetNextGlobalAlias(GA: LLVMValueRef) -> LLVMValueRef;
717    /// Decrement a GlobalAlias iterator to the previous GlobalAlias.
718    ///
719    /// Returns NULL if the iterator was already at the beginning and there are no previous global aliases.
720    pub fn LLVMGetPreviousGlobalAlias(GA: LLVMValueRef) -> LLVMValueRef;
721    /// Retrieve the target value of an alias.
722    pub fn LLVMAliasGetAliasee(Alias: LLVMValueRef) -> LLVMValueRef;
723    /// Set the target value of an alias.
724    pub fn LLVMAliasSetAliasee(Alias: LLVMValueRef, Aliasee: LLVMValueRef);
725
726    pub fn LLVMAddAlias(
727        M: LLVMModuleRef,
728        Ty: LLVMTypeRef,
729        Aliasee: LLVMValueRef,
730        Name: *const ::libc::c_char,
731    ) -> LLVMValueRef;
732
733    // ..->Function Values
734    pub fn LLVMDeleteFunction(Fn: LLVMValueRef);
735    /// Check whether the given function has a personality function.
736    pub fn LLVMHasPersonalityFn(Fn: LLVMValueRef) -> LLVMBool;
737    /// Obtain the personality function attached to the function.
738    ///
739    /// Added in LLVM 3.7.
740    pub fn LLVMGetPersonalityFn(Fn: LLVMValueRef) -> LLVMValueRef;
741    /// Set the personality function attached to the function.
742    ///
743    /// Added in LLVM 3.7.
744    pub fn LLVMSetPersonalityFn(Fn: LLVMValueRef, PersonalityFn: LLVMValueRef);
745    /// Obtain the intrinsic ID number which matches the given function name.
746    #[cfg(LLVM_VERSION_9_OR_GREATER)]
747    pub fn LLVMLookupIntrinsicID(
748        Name: *const ::libc::c_char,
749        NameLen: ::libc::size_t,
750    ) -> ::libc::c_uint;
751    /// Obtain the ID number from a function instance.
752    pub fn LLVMGetIntrinsicID(Fn: LLVMValueRef) -> ::libc::c_uint;
753    pub fn LLVMGetIntrinsicDeclaration(
754        Mod: LLVMModuleRef,
755        ID: ::libc::c_uint,
756        ParamTypes: *mut LLVMTypeRef,
757        ParamCount: ::libc::size_t,
758    ) -> LLVMValueRef;
759    pub fn LLVMIntrinsicGetType(
760        Ctx: LLVMContextRef,
761        ParamTypes: *mut LLVMTypeRef,
762        ParamCount: ::libc::size_t,
763    ) -> LLVMTypeRef;
764    pub fn LLVMIntrinsicGetName(
765        ID: ::libc::c_uint,
766        NameLength: *mut ::libc::size_t,
767    ) -> *const ::libc::c_char;
768    pub fn LLVMIntrinsicCopyOverloadedName(
769        ID: ::libc::c_uint,
770        ParamTypes: *mut LLVMTypeRef,
771        ParamCount: ::libc::size_t,
772        NameLength: *mut ::libc::size_t,
773    ) -> *const ::libc::c_char;
774    pub fn LLVMIntrinsicIsOverloaded(ID: ::libc::c_uint) -> LLVMBool;
775    pub fn LLVMGetFunctionCallConv(Fn: LLVMValueRef) -> ::libc::c_uint;
776    pub fn LLVMSetFunctionCallConv(Fn: LLVMValueRef, CC: ::libc::c_uint);
777    pub fn LLVMGetGC(Fn: LLVMValueRef) -> *const ::libc::c_char;
778    pub fn LLVMSetGC(Fn: LLVMValueRef, Name: *const ::libc::c_char);
779    pub fn LLVMAddAttributeAtIndex(F: LLVMValueRef, Idx: LLVMAttributeIndex, A: LLVMAttributeRef);
780    pub fn LLVMGetAttributeCountAtIndex(F: LLVMValueRef, Idx: LLVMAttributeIndex)
781        -> ::libc::c_uint;
782    pub fn LLVMGetAttributesAtIndex(
783        F: LLVMValueRef,
784        Idx: LLVMAttributeIndex,
785        Attrs: *mut LLVMAttributeRef,
786    );
787    pub fn LLVMGetEnumAttributeAtIndex(
788        F: LLVMValueRef,
789        Idx: LLVMAttributeIndex,
790        KindID: ::libc::c_uint,
791    ) -> LLVMAttributeRef;
792    pub fn LLVMGetStringAttributeAtIndex(
793        F: LLVMValueRef,
794        Idx: LLVMAttributeIndex,
795        K: *const ::libc::c_char,
796        KLen: ::libc::c_uint,
797    ) -> LLVMAttributeRef;
798    pub fn LLVMRemoveEnumAttributeAtIndex(
799        F: LLVMValueRef,
800        Idx: LLVMAttributeIndex,
801        KindID: ::libc::c_uint,
802    );
803    pub fn LLVMRemoveStringAttributeAtIndex(
804        F: LLVMValueRef,
805        Idx: LLVMAttributeIndex,
806        K: *const ::libc::c_char,
807        KLen: ::libc::c_uint,
808    );
809    pub fn LLVMAddTargetDependentFunctionAttr(
810        Fn: LLVMValueRef,
811        A: *const ::libc::c_char,
812        V: *const ::libc::c_char,
813    );
814
815    // ..->Function Values->Function Parameters
816    pub fn LLVMCountParams(Fn: LLVMValueRef) -> ::libc::c_uint;
817    pub fn LLVMGetParams(Fn: LLVMValueRef, Params: *mut LLVMValueRef);
818    pub fn LLVMGetParam(Fn: LLVMValueRef, Index: ::libc::c_uint) -> LLVMValueRef;
819    pub fn LLVMGetParamParent(Inst: LLVMValueRef) -> LLVMValueRef;
820    pub fn LLVMGetFirstParam(Fn: LLVMValueRef) -> LLVMValueRef;
821    pub fn LLVMGetLastParam(Fn: LLVMValueRef) -> LLVMValueRef;
822    pub fn LLVMGetNextParam(Arg: LLVMValueRef) -> LLVMValueRef;
823    pub fn LLVMGetPreviousParam(Arg: LLVMValueRef) -> LLVMValueRef;
824    pub fn LLVMSetParamAlignment(Arg: LLVMValueRef, Align: ::libc::c_uint);
825}
826
827// Core->Metadata
828extern "C" {
829    #[cfg_attr(LLVM_VERSION_9_OR_GREATER, deprecated(since = "LLVM 9.0", note = "Use LLVMMDStringInContext2 instead."))]
830    pub fn LLVMMDStringInContext(
831        C: LLVMContextRef,
832        Str: *const ::libc::c_char,
833        SLen: ::libc::c_uint,
834    ) -> LLVMValueRef;
835    #[cfg_attr(LLVM_VERSION_9_OR_GREATER, deprecated(since = "LLVM 9.0", note = "Use LLVMMDStringInContext2 instead."))]
836    pub fn LLVMMDString(Str: *const ::libc::c_char, SLen: ::libc::c_uint) -> LLVMValueRef;
837    #[cfg_attr(LLVM_VERSION_9_OR_GREATER, deprecated(since = "LLVM 9.0", note = "Use LLVMMDNodeInContext2 instead."))]
838    pub fn LLVMMDNodeInContext(
839        C: LLVMContextRef,
840        Vals: *mut LLVMValueRef,
841        Count: ::libc::c_uint,
842    ) -> LLVMValueRef;
843    #[cfg_attr(LLVM_VERSION_9_OR_GREATER, deprecated(since = "LLVM 9.0", note = "Use LLVMMDNodeInContext2 instead."))]
844    pub fn LLVMMDNode(Vals: *mut LLVMValueRef, Count: ::libc::c_uint) -> LLVMValueRef;
845
846    /// Add a global indirect function to a module under a specified name.
847    #[cfg(LLVM_VERSION_9_OR_GREATER)]
848    pub fn LLVMAddGlobalIFunc(
849        M: LLVMModuleRef,
850        Name: *const ::libc::c_char,
851        NameLen: ::libc::size_t,
852        Ty: LLVMTypeRef,
853        AddrSpace: ::libc::c_uint,
854        Resolver: LLVMValueRef,
855    ) -> LLVMValueRef;
856
857    /// Obtain a GlobalIFunc value from a Module by its name.
858    #[cfg(LLVM_VERSION_9_OR_GREATER)]
859    pub fn LLVMGetNamedGlobalIFunc(
860        M: LLVMModuleRef,
861        Name: *const ::libc::c_char,
862        NameLen: ::libc::size_t,
863    ) -> LLVMValueRef;
864
865    /// Obtain an iterator to the first GlobalIFunc in a Module.
866    #[cfg(LLVM_VERSION_9_OR_GREATER)]
867    pub fn LLVMGetFirstGlobalIFunc(M: LLVMModuleRef) -> LLVMValueRef;
868
869    /// Obtain an iterator to the last GlobalIFunc in a Module.
870    #[cfg(LLVM_VERSION_9_OR_GREATER)]
871    pub fn LLVMGetLastGlobalIFunc(M: LLVMModuleRef) -> LLVMValueRef;
872
873    /// Advance a GlobalIFunc iterator to the next GlobalIFunc.
874    #[cfg(LLVM_VERSION_9_OR_GREATER)]
875    pub fn LLVMGetNextGlobalIFunc(IFunc: LLVMValueRef) -> LLVMValueRef;
876
877    /// Decrement a GlobalIFunc iterator to the previous GlobalIFunc.
878    #[cfg(LLVM_VERSION_9_OR_GREATER)]
879    pub fn LLVMGetPreviousGlobalIFunc(IFunc: LLVMValueRef) -> LLVMValueRef;
880
881    /// Retrieves the resolver function associated with this indirect function, or
882    /// NULL if it doesn't not exist.
883    #[cfg(LLVM_VERSION_9_OR_GREATER)]
884    pub fn LLVMGetGlobalIFuncResolver(IFunc: LLVMValueRef) -> LLVMValueRef;
885
886    /// Sets the resolver function associated with this indirect function.
887    #[cfg(LLVM_VERSION_9_OR_GREATER)]
888    pub fn LLVMSetGlobalIFuncResolver(IFunc: LLVMValueRef, Resolver: LLVMValueRef);
889
890    /// Remove a global indirect function from its parent module and delete it.
891    #[cfg(LLVM_VERSION_9_OR_GREATER)]
892    pub fn LLVMEraseGlobalIFunc(IFunc: LLVMValueRef);
893
894    /// Remove a global indirect function from its parent module.
895    #[cfg(LLVM_VERSION_9_OR_GREATER)]
896    pub fn LLVMRemoveGlobalIFunc(IFunc: LLVMValueRef);
897
898    /// Create an MDString value from a given string value.
899    #[cfg(LLVM_VERSION_9_OR_GREATER)]
900    pub fn LLVMMDStringInContext2(
901        C: LLVMContextRef,
902        Str: *const ::libc::c_char,
903        SLen: ::libc::size_t,
904    ) -> LLVMMetadataRef;
905
906    /// Create an MDNode value with the given array of operands.
907    #[cfg(LLVM_VERSION_9_OR_GREATER)]
908    pub fn LLVMMDNodeInContext2(
909        C: LLVMContextRef,
910        MDs: *mut LLVMMetadataRef,
911        Count: ::libc::size_t,
912    ) -> LLVMMetadataRef;
913
914    /// Obtain Metadata as a Value.
915    pub fn LLVMMetadataAsValue(C: LLVMContextRef, MD: LLVMMetadataRef) -> LLVMValueRef;
916    /// Obtain a Value as Metadata.
917    pub fn LLVMValueAsMetadata(Val: LLVMValueRef) -> LLVMMetadataRef;
918    /// Obtain the underlying string from a MDString value.
919    ///
920    /// `Len` is written to contain the length of the returned string.
921    pub fn LLVMGetMDString(V: LLVMValueRef, Len: *mut ::libc::c_uint) -> *const ::libc::c_char;
922    pub fn LLVMGetMDNodeNumOperands(V: LLVMValueRef) -> ::libc::c_uint;
923    pub fn LLVMGetMDNodeOperands(V: LLVMValueRef, Dest: *mut LLVMValueRef);
924}
925
926// Core->Basic Block
927extern "C" {
928    pub fn LLVMBasicBlockAsValue(BB: LLVMBasicBlockRef) -> LLVMValueRef;
929    pub fn LLVMValueIsBasicBlock(Val: LLVMValueRef) -> LLVMBool;
930    pub fn LLVMValueAsBasicBlock(Val: LLVMValueRef) -> LLVMBasicBlockRef;
931    /// Get the string name of a basic block.
932    pub fn LLVMGetBasicBlockName(BB: LLVMBasicBlockRef) -> *const ::libc::c_char;
933    pub fn LLVMGetBasicBlockParent(BB: LLVMBasicBlockRef) -> LLVMValueRef;
934    pub fn LLVMGetBasicBlockTerminator(BB: LLVMBasicBlockRef) -> LLVMValueRef;
935    pub fn LLVMCountBasicBlocks(Fn: LLVMValueRef) -> ::libc::c_uint;
936    pub fn LLVMGetBasicBlocks(Fn: LLVMValueRef, BasicBlocks: *mut LLVMBasicBlockRef);
937    pub fn LLVMGetFirstBasicBlock(Fn: LLVMValueRef) -> LLVMBasicBlockRef;
938    pub fn LLVMGetLastBasicBlock(Fn: LLVMValueRef) -> LLVMBasicBlockRef;
939    pub fn LLVMGetNextBasicBlock(BB: LLVMBasicBlockRef) -> LLVMBasicBlockRef;
940    pub fn LLVMGetPreviousBasicBlock(BB: LLVMBasicBlockRef) -> LLVMBasicBlockRef;
941    pub fn LLVMGetEntryBasicBlock(Fn: LLVMValueRef) -> LLVMBasicBlockRef;
942    /// Insert the given basic block after the insertion point of the given builder.
943    #[cfg(LLVM_VERSION_9_OR_GREATER)]
944    pub fn LLVMInsertExistingBasicBlockAfterInsertBlock(
945        Builder: LLVMBuilderRef,
946        BB: LLVMBasicBlockRef,
947    );
948    /// Append the given basic block to the basic block list of the given function.
949    #[cfg(LLVM_VERSION_9_OR_GREATER)]
950    pub fn LLVMAppendExistingBasicBlock(Fn: LLVMValueRef, BB: LLVMBasicBlockRef);
951    pub fn LLVMCreateBasicBlockInContext(
952        C: LLVMContextRef,
953        Name: *const ::libc::c_char,
954    ) -> LLVMBasicBlockRef;
955    pub fn LLVMAppendBasicBlockInContext(
956        C: LLVMContextRef,
957        Fn: LLVMValueRef,
958        Name: *const ::libc::c_char,
959    ) -> LLVMBasicBlockRef;
960    pub fn LLVMAppendBasicBlock(Fn: LLVMValueRef, Name: *const ::libc::c_char)
961        -> LLVMBasicBlockRef;
962    pub fn LLVMInsertBasicBlockInContext(
963        C: LLVMContextRef,
964        BB: LLVMBasicBlockRef,
965        Name: *const ::libc::c_char,
966    ) -> LLVMBasicBlockRef;
967    pub fn LLVMInsertBasicBlock(
968        InsertBeforeBB: LLVMBasicBlockRef,
969        Name: *const ::libc::c_char,
970    ) -> LLVMBasicBlockRef;
971    pub fn LLVMDeleteBasicBlock(BB: LLVMBasicBlockRef);
972    pub fn LLVMRemoveBasicBlockFromParent(BB: LLVMBasicBlockRef);
973    pub fn LLVMMoveBasicBlockBefore(BB: LLVMBasicBlockRef, MovePos: LLVMBasicBlockRef);
974    pub fn LLVMMoveBasicBlockAfter(BB: LLVMBasicBlockRef, MovePos: LLVMBasicBlockRef);
975    pub fn LLVMGetFirstInstruction(BB: LLVMBasicBlockRef) -> LLVMValueRef;
976    pub fn LLVMGetLastInstruction(BB: LLVMBasicBlockRef) -> LLVMValueRef;
977}
978
979// Core->Instructions
980extern "C" {
981    pub fn LLVMHasMetadata(Val: LLVMValueRef) -> ::libc::c_int;
982    pub fn LLVMGetMetadata(Val: LLVMValueRef, KindID: ::libc::c_uint) -> LLVMValueRef;
983    pub fn LLVMSetMetadata(Val: LLVMValueRef, KindID: ::libc::c_uint, Node: LLVMValueRef);
984    pub fn LLVMInstructionGetAllMetadataOtherThanDebugLoc(
985        Instr: LLVMValueRef,
986        NumEntries: *mut ::libc::size_t,
987    ) -> *mut LLVMValueMetadataEntry;
988    pub fn LLVMGetInstructionParent(Inst: LLVMValueRef) -> LLVMBasicBlockRef;
989    pub fn LLVMGetNextInstruction(Inst: LLVMValueRef) -> LLVMValueRef;
990    pub fn LLVMGetPreviousInstruction(Inst: LLVMValueRef) -> LLVMValueRef;
991    /// Remove the given instruction from its containing building block but
992    /// kept alive.
993    pub fn LLVMInstructionRemoveFromParent(Inst: LLVMValueRef);
994    /// Remove the given instruction from its containing building block and
995    /// delete it.
996    pub fn LLVMInstructionEraseFromParent(Inst: LLVMValueRef);
997    pub fn LLVMGetInstructionOpcode(Inst: LLVMValueRef) -> LLVMOpcode;
998    pub fn LLVMGetICmpPredicate(Inst: LLVMValueRef) -> LLVMIntPredicate;
999    pub fn LLVMGetFCmpPredicate(Inst: LLVMValueRef) -> LLVMRealPredicate;
1000    pub fn LLVMInstructionClone(Inst: LLVMValueRef) -> LLVMValueRef;
1001    pub fn LLVMIsATerminatorInst(Inst: LLVMValueRef) -> LLVMValueRef;
1002
1003    // Instructions->Call Sites and Invocations
1004    // Obtain the argument count for a call instruction.
1005    //
1006    // The provided value should be either a CallInst, InvokeInst or FuncletPadInst.
1007    pub fn LLVMGetNumArgOperands(Instr: LLVMValueRef) -> ::libc::c_uint;
1008    pub fn LLVMSetInstructionCallConv(Instr: LLVMValueRef, CC: ::libc::c_uint);
1009    pub fn LLVMGetInstructionCallConv(Instr: LLVMValueRef) -> ::libc::c_uint;
1010    pub fn LLVMSetInstrParamAlignment(
1011        Instr: LLVMValueRef,
1012        index: ::libc::c_uint,
1013        Align: ::libc::c_uint,
1014    );
1015    pub fn LLVMAddCallSiteAttribute(C: LLVMValueRef, Idx: LLVMAttributeIndex, A: LLVMAttributeRef);
1016    pub fn LLVMGetCallSiteAttributeCount(
1017        C: LLVMValueRef,
1018        Idx: LLVMAttributeIndex,
1019    ) -> ::libc::c_uint;
1020    pub fn LLVMGetCallSiteAttributes(
1021        C: LLVMValueRef,
1022        Idx: LLVMAttributeIndex,
1023        Attrs: *mut LLVMAttributeRef,
1024    );
1025    pub fn LLVMGetCallSiteEnumAttribute(
1026        C: LLVMValueRef,
1027        Idx: LLVMAttributeIndex,
1028        KindID: ::libc::c_uint,
1029    ) -> LLVMAttributeRef;
1030    pub fn LLVMGetCallSiteStringAttribute(
1031        C: LLVMValueRef,
1032        Idx: LLVMAttributeIndex,
1033        K: *const ::libc::c_char,
1034        KLen: ::libc::c_uint,
1035    ) -> LLVMAttributeRef;
1036    pub fn LLVMRemoveCallSiteEnumAttribute(
1037        C: LLVMValueRef,
1038        Idx: LLVMAttributeIndex,
1039        KindID: ::libc::c_uint,
1040    );
1041    pub fn LLVMRemoveCallSiteStringAttribute(
1042        C: LLVMValueRef,
1043        Idx: LLVMAttributeIndex,
1044        K: *const ::libc::c_char,
1045        KLen: ::libc::c_uint,
1046    );
1047    pub fn LLVMGetCalledFunctionType(C: LLVMValueRef) -> LLVMTypeRef;
1048    /// Get a pointer to the function invoked by this instruction.
1049    ///
1050    /// The provided value should be a CallInst or InvokeInst.
1051    pub fn LLVMGetCalledValue(Instr: LLVMValueRef) -> LLVMValueRef;
1052    /// Get whether a call instruction is a tail call.
1053    pub fn LLVMIsTailCall(CallInst: LLVMValueRef) -> LLVMBool;
1054    pub fn LLVMSetTailCall(CallInst: LLVMValueRef, IsTailCall: LLVMBool);
1055    /// Return the normal destination basic block of an invoke instruction.
1056    pub fn LLVMGetNormalDest(InvokeInst: LLVMValueRef) -> LLVMBasicBlockRef;
1057    /// Return the unwind destination basic block.
1058    pub fn LLVMGetUnwindDest(InvokeInst: LLVMValueRef) -> LLVMBasicBlockRef;
1059    /// Set the normal destination basic block.
1060    pub fn LLVMSetNormalDest(InvokeInst: LLVMValueRef, B: LLVMBasicBlockRef);
1061    /// Set the unwind destination basic block.
1062    pub fn LLVMSetUnwindDest(InvokeInst: LLVMValueRef, B: LLVMBasicBlockRef);
1063
1064    // Instructions->Terminators
1065    pub fn LLVMGetNumSuccessors(Term: LLVMValueRef) -> ::libc::c_uint;
1066    pub fn LLVMGetSuccessor(Term: LLVMValueRef, i: ::libc::c_uint) -> LLVMBasicBlockRef;
1067    pub fn LLVMSetSuccessor(Term: LLVMValueRef, i: ::libc::c_uint, block: LLVMBasicBlockRef);
1068    pub fn LLVMIsConditional(Branch: LLVMValueRef) -> LLVMBool;
1069    pub fn LLVMGetCondition(Branch: LLVMValueRef) -> LLVMValueRef;
1070    pub fn LLVMSetCondition(Branch: LLVMValueRef, Cond: LLVMValueRef);
1071    pub fn LLVMGetSwitchDefaultDest(SwitchInstr: LLVMValueRef) -> LLVMBasicBlockRef;
1072
1073    // Instructions->Allocas
1074    // Obtain the type being allocated by an alloca instruction.
1075    pub fn LLVMGetAllocatedType(Alloca: LLVMValueRef) -> LLVMTypeRef;
1076
1077    // Instructions->GEPs
1078    // Check whether the given GEP instruction is inbounds.
1079    pub fn LLVMIsInBounds(GEP: LLVMValueRef) -> LLVMBool;
1080    /// Set the given GEP instruction to be inbounds or not.
1081    pub fn LLVMSetIsInBounds(GEP: LLVMValueRef, InBounds: LLVMBool);
1082
1083    // Instruction->PHI Nodes
1084    pub fn LLVMAddIncoming(
1085        PhiNode: LLVMValueRef,
1086        IncomingValues: *mut LLVMValueRef,
1087        IncomingBlocks: *mut LLVMBasicBlockRef,
1088        Count: ::libc::c_uint,
1089    );
1090    pub fn LLVMCountIncoming(PhiNode: LLVMValueRef) -> ::libc::c_uint;
1091    pub fn LLVMGetIncomingValue(PhiNode: LLVMValueRef, Index: ::libc::c_uint) -> LLVMValueRef;
1092    pub fn LLVMGetIncomingBlock(PhiNode: LLVMValueRef, Index: ::libc::c_uint) -> LLVMBasicBlockRef;
1093
1094}
1095
1096// Core->Values again; these don't appear in Doxygen because they're macro-generated.
1097extern "C" {
1098    pub fn LLVMIsAArgument(Val: LLVMValueRef) -> LLVMValueRef;
1099    pub fn LLVMIsABasicBlock(Val: LLVMValueRef) -> LLVMValueRef;
1100    pub fn LLVMIsAInlineAsm(Val: LLVMValueRef) -> LLVMValueRef;
1101    pub fn LLVMIsAUser(Val: LLVMValueRef) -> LLVMValueRef;
1102    pub fn LLVMIsAConstant(Val: LLVMValueRef) -> LLVMValueRef;
1103    pub fn LLVMIsABlockAddress(Val: LLVMValueRef) -> LLVMValueRef;
1104    pub fn LLVMIsAConstantAggregateZero(Val: LLVMValueRef) -> LLVMValueRef;
1105    pub fn LLVMIsAConstantArray(Val: LLVMValueRef) -> LLVMValueRef;
1106    pub fn LLVMIsAConstantDataSequential(Val: LLVMValueRef) -> LLVMValueRef;
1107    pub fn LLVMIsAConstantDataArray(Val: LLVMValueRef) -> LLVMValueRef;
1108    pub fn LLVMIsAConstantDataVector(Val: LLVMValueRef) -> LLVMValueRef;
1109    pub fn LLVMIsAConstantExpr(Val: LLVMValueRef) -> LLVMValueRef;
1110    pub fn LLVMIsAConstantFP(Val: LLVMValueRef) -> LLVMValueRef;
1111    pub fn LLVMIsAConstantInt(Val: LLVMValueRef) -> LLVMValueRef;
1112    pub fn LLVMIsAConstantPointerNull(Val: LLVMValueRef) -> LLVMValueRef;
1113    pub fn LLVMIsAConstantStruct(Val: LLVMValueRef) -> LLVMValueRef;
1114    pub fn LLVMIsAConstantTokenNone(Val: LLVMValueRef) -> LLVMValueRef;
1115    pub fn LLVMIsAConstantVector(Val: LLVMValueRef) -> LLVMValueRef;
1116    pub fn LLVMIsAGlobalValue(Val: LLVMValueRef) -> LLVMValueRef;
1117    pub fn LLVMIsAGlobalAlias(Val: LLVMValueRef) -> LLVMValueRef;
1118    pub fn LLVMIsAGlobalIFunc(Val: LLVMValueRef) -> LLVMValueRef;
1119    pub fn LLVMIsAGlobalObject(Val: LLVMValueRef) -> LLVMValueRef;
1120    pub fn LLVMIsAFunction(Val: LLVMValueRef) -> LLVMValueRef;
1121    pub fn LLVMIsAGlobalVariable(Val: LLVMValueRef) -> LLVMValueRef;
1122    pub fn LLVMIsAUndefValue(Val: LLVMValueRef) -> LLVMValueRef;
1123    pub fn LLVMIsAInstruction(Val: LLVMValueRef) -> LLVMValueRef;
1124    #[cfg(LLVM_VERSION_10_OR_GREATER)]
1125    pub fn LLVMIsAUnaryOperator(Val: LLVMValueRef) -> LLVMValueRef;
1126    pub fn LLVMIsABinaryOperator(Val: LLVMValueRef) -> LLVMValueRef;
1127    pub fn LLVMIsACallInst(Val: LLVMValueRef) -> LLVMValueRef;
1128    pub fn LLVMIsAIntrinsicInst(Val: LLVMValueRef) -> LLVMValueRef;
1129    pub fn LLVMIsADbgInfoIntrinsic(Val: LLVMValueRef) -> LLVMValueRef;
1130    pub fn LLVMIsADbgVariableIntrinsic(Val: LLVMValueRef) -> LLVMValueRef;
1131    pub fn LLVMIsADbgDeclareInst(Val: LLVMValueRef) -> LLVMValueRef;
1132    pub fn LLVMIsADbgLabelInst(Val: LLVMValueRef) -> LLVMValueRef;
1133    pub fn LLVMIsAMemIntrinsic(Val: LLVMValueRef) -> LLVMValueRef;
1134    pub fn LLVMIsAMemCpyInst(Val: LLVMValueRef) -> LLVMValueRef;
1135    pub fn LLVMIsAMemMoveInst(Val: LLVMValueRef) -> LLVMValueRef;
1136    pub fn LLVMIsAMemSetInst(Val: LLVMValueRef) -> LLVMValueRef;
1137    pub fn LLVMIsACmpInst(Val: LLVMValueRef) -> LLVMValueRef;
1138    pub fn LLVMIsAFCmpInst(Val: LLVMValueRef) -> LLVMValueRef;
1139    pub fn LLVMIsAICmpInst(Val: LLVMValueRef) -> LLVMValueRef;
1140    pub fn LLVMIsAExtractElementInst(Val: LLVMValueRef) -> LLVMValueRef;
1141    pub fn LLVMIsAGetElementPtrInst(Val: LLVMValueRef) -> LLVMValueRef;
1142    pub fn LLVMIsAInsertElementInst(Val: LLVMValueRef) -> LLVMValueRef;
1143    pub fn LLVMIsAInsertValueInst(Val: LLVMValueRef) -> LLVMValueRef;
1144    pub fn LLVMIsALandingPadInst(Val: LLVMValueRef) -> LLVMValueRef;
1145    pub fn LLVMIsAPHINode(Val: LLVMValueRef) -> LLVMValueRef;
1146    pub fn LLVMIsASelectInst(Val: LLVMValueRef) -> LLVMValueRef;
1147    pub fn LLVMIsAShuffleVectorInst(Val: LLVMValueRef) -> LLVMValueRef;
1148    pub fn LLVMIsAStoreInst(Val: LLVMValueRef) -> LLVMValueRef;
1149    pub fn LLVMIsABranchInst(Val: LLVMValueRef) -> LLVMValueRef;
1150    pub fn LLVMIsAIndirectBrInst(Val: LLVMValueRef) -> LLVMValueRef;
1151    pub fn LLVMIsAInvokeInst(Val: LLVMValueRef) -> LLVMValueRef;
1152    pub fn LLVMIsAReturnInst(Val: LLVMValueRef) -> LLVMValueRef;
1153    pub fn LLVMIsASwitchInst(Val: LLVMValueRef) -> LLVMValueRef;
1154    pub fn LLVMIsAUnreachableInst(Val: LLVMValueRef) -> LLVMValueRef;
1155    pub fn LLVMIsAResumeInst(Val: LLVMValueRef) -> LLVMValueRef;
1156    pub fn LLVMIsACleanupReturnInst(Val: LLVMValueRef) -> LLVMValueRef;
1157    pub fn LLVMIsACatchReturnInst(Val: LLVMValueRef) -> LLVMValueRef;
1158    #[cfg(LLVM_VERSION_10_OR_GREATER)]
1159    pub fn LLVMIsACatchSwitchInst(Val: LLVMValueRef) -> LLVMValueRef;
1160    #[cfg(LLVM_VERSION_10_OR_GREATER)]
1161    pub fn LLVMIsACallBrInst(Val: LLVMValueRef) -> LLVMValueRef;
1162    pub fn LLVMIsAFuncletPadInst(Val: LLVMValueRef) -> LLVMValueRef;
1163    pub fn LLVMIsACatchPadInst(Val: LLVMValueRef) -> LLVMValueRef;
1164    pub fn LLVMIsACleanupPadInst(Val: LLVMValueRef) -> LLVMValueRef;
1165    pub fn LLVMIsAUnaryInstruction(Val: LLVMValueRef) -> LLVMValueRef;
1166    pub fn LLVMIsAAllocaInst(Val: LLVMValueRef) -> LLVMValueRef;
1167    pub fn LLVMIsACastInst(Val: LLVMValueRef) -> LLVMValueRef;
1168    pub fn LLVMIsAAddrSpaceCastInst(Val: LLVMValueRef) -> LLVMValueRef;
1169    pub fn LLVMIsABitCastInst(Val: LLVMValueRef) -> LLVMValueRef;
1170    pub fn LLVMIsAFPExtInst(Val: LLVMValueRef) -> LLVMValueRef;
1171    pub fn LLVMIsAFPToSIInst(Val: LLVMValueRef) -> LLVMValueRef;
1172    pub fn LLVMIsAFPToUIInst(Val: LLVMValueRef) -> LLVMValueRef;
1173    pub fn LLVMIsAFPTruncInst(Val: LLVMValueRef) -> LLVMValueRef;
1174    pub fn LLVMIsAIntToPtrInst(Val: LLVMValueRef) -> LLVMValueRef;
1175    pub fn LLVMIsAPtrToIntInst(Val: LLVMValueRef) -> LLVMValueRef;
1176    pub fn LLVMIsASExtInst(Val: LLVMValueRef) -> LLVMValueRef;
1177    pub fn LLVMIsASIToFPInst(Val: LLVMValueRef) -> LLVMValueRef;
1178    pub fn LLVMIsATruncInst(Val: LLVMValueRef) -> LLVMValueRef;
1179    pub fn LLVMIsAUIToFPInst(Val: LLVMValueRef) -> LLVMValueRef;
1180    pub fn LLVMIsAZExtInst(Val: LLVMValueRef) -> LLVMValueRef;
1181    pub fn LLVMIsAExtractValueInst(Val: LLVMValueRef) -> LLVMValueRef;
1182    pub fn LLVMIsALoadInst(Val: LLVMValueRef) -> LLVMValueRef;
1183    pub fn LLVMIsAVAArgInst(Val: LLVMValueRef) -> LLVMValueRef;
1184    #[cfg(LLVM_VERSION_10_OR_GREATER)]
1185    pub fn LLVMIsAFreezeInst(Val: LLVMValueRef) -> LLVMValueRef;
1186    #[cfg(LLVM_VERSION_10_OR_GREATER)]
1187    pub fn LLVMIsAAtomicCmpXchgInst(Val: LLVMValueRef) -> LLVMValueRef;
1188    #[cfg(LLVM_VERSION_10_OR_GREATER)]
1189    pub fn LLVMIsAAtomicRMWInst(Val: LLVMValueRef) -> LLVMValueRef;
1190    #[cfg(LLVM_VERSION_10_OR_GREATER)]
1191    pub fn LLVMIsAFenceInst(Val: LLVMValueRef) -> LLVMValueRef;
1192}
1193
1194// Core->Extract/Insert Value
1195extern "C" {
1196    /// Get the number of indices on an ExtractValue, InsertValue or GEP instruction.
1197    pub fn LLVMGetNumIndices(Inst: LLVMValueRef) -> ::libc::c_uint;
1198    pub fn LLVMGetIndices(Inst: LLVMValueRef) -> *const ::libc::c_uint;
1199}
1200
1201// Core->Instruction Builders
1202extern "C" {
1203    pub fn LLVMCreateBuilderInContext(C: LLVMContextRef) -> LLVMBuilderRef;
1204    pub fn LLVMCreateBuilder() -> LLVMBuilderRef;
1205    pub fn LLVMPositionBuilder(
1206        Builder: LLVMBuilderRef,
1207        Block: LLVMBasicBlockRef,
1208        Instr: LLVMValueRef,
1209    );
1210    pub fn LLVMPositionBuilderBefore(Builder: LLVMBuilderRef, Instr: LLVMValueRef);
1211    pub fn LLVMPositionBuilderAtEnd(Builder: LLVMBuilderRef, Block: LLVMBasicBlockRef);
1212    pub fn LLVMGetInsertBlock(Builder: LLVMBuilderRef) -> LLVMBasicBlockRef;
1213    pub fn LLVMClearInsertionPosition(Builder: LLVMBuilderRef);
1214    pub fn LLVMInsertIntoBuilder(Builder: LLVMBuilderRef, Instr: LLVMValueRef);
1215    pub fn LLVMInsertIntoBuilderWithName(
1216        Builder: LLVMBuilderRef,
1217        Instr: LLVMValueRef,
1218        Name: *const ::libc::c_char,
1219    );
1220    pub fn LLVMDisposeBuilder(Builder: LLVMBuilderRef);
1221
1222    // Metadata
1223    /// Get location information used by debugging information.
1224    #[cfg(LLVM_VERSION_9_OR_GREATER)]
1225    pub fn LLVMGetCurrentDebugLocation2(Builder: LLVMBuilderRef) -> LLVMMetadataRef;
1226    /// Set location information used by debugging information.
1227    #[cfg(LLVM_VERSION_9_OR_GREATER)]
1228    pub fn LLVMSetCurrentDebugLocation2(Builder: LLVMBuilderRef, Loc: LLVMMetadataRef);
1229    /// Attempts to set the debug location for the given instruction using the
1230    /// current debug location for the given builder.  If the builder has no current
1231    /// debug location, this function is a no-op.
1232    #[cfg(LLVM_VERSION_9_OR_GREATER)]
1233    pub fn LLVMSetInstDebugLocation(Builder: LLVMBuilderRef, Inst: LLVMValueRef);
1234    /// Get the dafult floating-point math metadata for a given builder.
1235    #[cfg(LLVM_VERSION_9_OR_GREATER)]
1236    pub fn LLVMBuilderGetDefaultFPMathTag(Builder: LLVMBuilderRef) -> LLVMMetadataRef;
1237    /// Set the default floating-point math metadata for the given builder.
1238    #[cfg(LLVM_VERSION_9_OR_GREATER)]
1239    pub fn LLVMBuilderSetDefaultFPMathTag(Builder: LLVMBuilderRef, FPMathTag: LLVMMetadataRef);
1240    #[cfg_attr(LLVM_VERSION_9_OR_GREATER, deprecated(since = "LLVM 9.0", note = "Use LLVMGetCurrentDebugLocation2 instead."))]
1241    pub fn LLVMSetCurrentDebugLocation(Builder: LLVMBuilderRef, L: LLVMValueRef);
1242    pub fn LLVMGetCurrentDebugLocation(Builder: LLVMBuilderRef) -> LLVMValueRef;
1243    #[cfg(LLVM_VERSION_8_OR_LOWER)]
1244    pub fn LLVMSetInstDebugLocation(Builder: LLVMBuilderRef, Inst: LLVMValueRef);
1245
1246    // Terminators
1247    pub fn LLVMBuildRetVoid(arg1: LLVMBuilderRef) -> LLVMValueRef;
1248    pub fn LLVMBuildRet(arg1: LLVMBuilderRef, V: LLVMValueRef) -> LLVMValueRef;
1249    pub fn LLVMBuildAggregateRet(
1250        arg1: LLVMBuilderRef,
1251        RetVals: *mut LLVMValueRef,
1252        N: ::libc::c_uint,
1253    ) -> LLVMValueRef;
1254    pub fn LLVMBuildBr(arg1: LLVMBuilderRef, Dest: LLVMBasicBlockRef) -> LLVMValueRef;
1255    pub fn LLVMBuildCondBr(
1256        arg1: LLVMBuilderRef,
1257        If: LLVMValueRef,
1258        Then: LLVMBasicBlockRef,
1259        Else: LLVMBasicBlockRef,
1260    ) -> LLVMValueRef;
1261    pub fn LLVMBuildSwitch(
1262        arg1: LLVMBuilderRef,
1263        V: LLVMValueRef,
1264        Else: LLVMBasicBlockRef,
1265        NumCases: ::libc::c_uint,
1266    ) -> LLVMValueRef;
1267    pub fn LLVMBuildIndirectBr(
1268        B: LLVMBuilderRef,
1269        Addr: LLVMValueRef,
1270        NumDests: ::libc::c_uint,
1271    ) -> LLVMValueRef;
1272    pub fn LLVMBuildInvoke(
1273        arg1: LLVMBuilderRef,
1274        Fn: LLVMValueRef,
1275        Args: *mut LLVMValueRef,
1276        NumArgs: ::libc::c_uint,
1277        Then: LLVMBasicBlockRef,
1278        Catch: LLVMBasicBlockRef,
1279        Name: *const ::libc::c_char,
1280    ) -> LLVMValueRef;
1281    pub fn LLVMBuildInvoke2(
1282        arg1: LLVMBuilderRef,
1283        Ty: LLVMTypeRef,
1284        Fn: LLVMValueRef,
1285        Args: *mut LLVMValueRef,
1286        NumArgs: ::libc::c_uint,
1287        Then: LLVMBasicBlockRef,
1288        Catch: LLVMBasicBlockRef,
1289        Name: *const ::libc::c_char,
1290    ) -> LLVMValueRef;
1291    pub fn LLVMBuildUnreachable(B: LLVMBuilderRef) -> LLVMValueRef;
1292
1293    pub fn LLVMBuildResume(B: LLVMBuilderRef, Exn: LLVMValueRef) -> LLVMValueRef;
1294    pub fn LLVMBuildLandingPad(
1295        B: LLVMBuilderRef,
1296        Ty: LLVMTypeRef,
1297        PersFn: LLVMValueRef,
1298        NumClauses: ::libc::c_uint,
1299        Name: *const ::libc::c_char,
1300    ) -> LLVMValueRef;
1301    pub fn LLVMBuildCleanupRet(
1302        B: LLVMBuilderRef,
1303        CatchPad: LLVMValueRef,
1304        BB: LLVMBasicBlockRef,
1305    ) -> LLVMValueRef;
1306    pub fn LLVMBuildCatchRet(
1307        B: LLVMBuilderRef,
1308        CatchPad: LLVMValueRef,
1309        BB: LLVMBasicBlockRef,
1310    ) -> LLVMValueRef;
1311    pub fn LLVMBuildCatchPad(
1312        B: LLVMBuilderRef,
1313        ParentPad: LLVMValueRef,
1314        Args: *mut LLVMValueRef,
1315        NumArgs: ::libc::c_uint,
1316        Name: *const ::libc::c_char,
1317    ) -> LLVMValueRef;
1318    pub fn LLVMBuildCleanupPad(
1319        B: LLVMBuilderRef,
1320        ParentPad: LLVMValueRef,
1321        Args: *mut LLVMValueRef,
1322        NumArgs: ::libc::c_uint,
1323        Name: *const ::libc::c_char,
1324    ) -> LLVMValueRef;
1325    pub fn LLVMBuildCatchSwitch(
1326        B: LLVMBuilderRef,
1327        ParentPad: LLVMValueRef,
1328        UnwindBB: LLVMBasicBlockRef,
1329        NumHandler: ::libc::c_uint,
1330        Name: *const ::libc::c_char,
1331    ) -> LLVMValueRef;
1332
1333    /// Add a case to a `switch` instruction
1334    pub fn LLVMAddCase(Switch: LLVMValueRef, OnVal: LLVMValueRef, Dest: LLVMBasicBlockRef);
1335
1336    /// Add a destination to an `indirectbr` instruction
1337    pub fn LLVMAddDestination(IndirectBr: LLVMValueRef, Dest: LLVMBasicBlockRef);
1338
1339    /// Get the number of clauses on a landingpad instruction.
1340    pub fn LLVMGetNumClauses(LandingPad: LLVMValueRef) -> ::libc::c_uint;
1341
1342    /// Get the value of the clause with the given index on a landingpad instruction.
1343    pub fn LLVMGetClause(LandingPad: LLVMValueRef, Idx: ::libc::c_uint) -> LLVMValueRef;
1344
1345    /// Add a catch or filter clause to a `landingpad` instruction
1346    pub fn LLVMAddClause(LandingPad: LLVMValueRef, ClauseVal: LLVMValueRef);
1347
1348    /// Get the cleanup flag in a landingpad instruction.
1349    pub fn LLVMIsCleanup(LandingPad: LLVMValueRef) -> LLVMBool;
1350
1351    /// Set the cleanup flag in a `landingpad` instruction.
1352    pub fn LLVMSetCleanup(LandingPad: LLVMValueRef, Val: LLVMBool);
1353
1354    /// Add a destination to the catchswitch instruction
1355    pub fn LLVMAddHandler(CatchSwitch: LLVMValueRef, Dest: LLVMBasicBlockRef);
1356
1357    /// Get the number of handlers on the catchswitch instruction
1358    pub fn LLVMGetNumHandlers(CatchSwitch: LLVMValueRef) -> ::libc::c_uint;
1359
1360    /// Obtain the basic blocks acting as handlers for a catchswitch instruction.
1361    ///
1362    /// The Handlers parameter should point to a pre-allocated array of LLVMBasicBlockRefs at least LLVMGetNumHandlers() large. On return, the first LLVMGetNumHandlers() entries in the array will be populated with LLVMBasicBlockRef instances.
1363    pub fn LLVMGetHandlers(CatchSwitch: LLVMValueRef, Handlers: *mut LLVMBasicBlockRef);
1364
1365    // Funclets
1366    /// Get the number of funcletpad arguments.
1367    pub fn LLVMGetArgOperand(Funclet: LLVMValueRef, i: ::libc::c_uint) -> LLVMValueRef;
1368
1369    /// Set a funcletpad argument at the given index.
1370    pub fn LLVMSetArgOperand(Funclet: LLVMValueRef, i: ::libc::c_uint, value: LLVMValueRef);
1371
1372    /// Get the parent catchswitch instruction of a catchpad instruction.
1373    ///
1374    /// This only works on llvm::CatchPadInst instructions.
1375    pub fn LLVMGetParentCatchSwitch(CatchPad: LLVMValueRef) -> LLVMValueRef;
1376
1377    /// Set the parent catchswitch instruction of a catchpad instruction.
1378    /// This only works on llvm::CatchPadInst instructions.
1379    pub fn LLVMSetParentCatchSwitch(CatchPad: LLVMValueRef, CatchSwitch: LLVMValueRef);
1380
1381    // Arithmetic
1382    pub fn LLVMBuildAdd(
1383        arg1: LLVMBuilderRef,
1384        LHS: LLVMValueRef,
1385        RHS: LLVMValueRef,
1386        Name: *const ::libc::c_char,
1387    ) -> LLVMValueRef;
1388    pub fn LLVMBuildNSWAdd(
1389        arg1: LLVMBuilderRef,
1390        LHS: LLVMValueRef,
1391        RHS: LLVMValueRef,
1392        Name: *const ::libc::c_char,
1393    ) -> LLVMValueRef;
1394    pub fn LLVMBuildNUWAdd(
1395        arg1: LLVMBuilderRef,
1396        LHS: LLVMValueRef,
1397        RHS: LLVMValueRef,
1398        Name: *const ::libc::c_char,
1399    ) -> LLVMValueRef;
1400    pub fn LLVMBuildFAdd(
1401        arg1: LLVMBuilderRef,
1402        LHS: LLVMValueRef,
1403        RHS: LLVMValueRef,
1404        Name: *const ::libc::c_char,
1405    ) -> LLVMValueRef;
1406    pub fn LLVMBuildSub(
1407        arg1: LLVMBuilderRef,
1408        LHS: LLVMValueRef,
1409        RHS: LLVMValueRef,
1410        Name: *const ::libc::c_char,
1411    ) -> LLVMValueRef;
1412    pub fn LLVMBuildNSWSub(
1413        arg1: LLVMBuilderRef,
1414        LHS: LLVMValueRef,
1415        RHS: LLVMValueRef,
1416        Name: *const ::libc::c_char,
1417    ) -> LLVMValueRef;
1418    pub fn LLVMBuildNUWSub(
1419        arg1: LLVMBuilderRef,
1420        LHS: LLVMValueRef,
1421        RHS: LLVMValueRef,
1422        Name: *const ::libc::c_char,
1423    ) -> LLVMValueRef;
1424    pub fn LLVMBuildFSub(
1425        arg1: LLVMBuilderRef,
1426        LHS: LLVMValueRef,
1427        RHS: LLVMValueRef,
1428        Name: *const ::libc::c_char,
1429    ) -> LLVMValueRef;
1430    pub fn LLVMBuildMul(
1431        arg1: LLVMBuilderRef,
1432        LHS: LLVMValueRef,
1433        RHS: LLVMValueRef,
1434        Name: *const ::libc::c_char,
1435    ) -> LLVMValueRef;
1436    pub fn LLVMBuildNSWMul(
1437        arg1: LLVMBuilderRef,
1438        LHS: LLVMValueRef,
1439        RHS: LLVMValueRef,
1440        Name: *const ::libc::c_char,
1441    ) -> LLVMValueRef;
1442    pub fn LLVMBuildNUWMul(
1443        arg1: LLVMBuilderRef,
1444        LHS: LLVMValueRef,
1445        RHS: LLVMValueRef,
1446        Name: *const ::libc::c_char,
1447    ) -> LLVMValueRef;
1448    pub fn LLVMBuildFMul(
1449        arg1: LLVMBuilderRef,
1450        LHS: LLVMValueRef,
1451        RHS: LLVMValueRef,
1452        Name: *const ::libc::c_char,
1453    ) -> LLVMValueRef;
1454    pub fn LLVMBuildUDiv(
1455        arg1: LLVMBuilderRef,
1456        LHS: LLVMValueRef,
1457        RHS: LLVMValueRef,
1458        Name: *const ::libc::c_char,
1459    ) -> LLVMValueRef;
1460    pub fn LLVMBuildExactUDiv(
1461        arg1: LLVMBuilderRef,
1462        LHS: LLVMValueRef,
1463        RHS: LLVMValueRef,
1464        Name: *const ::libc::c_char,
1465    ) -> LLVMValueRef;
1466    pub fn LLVMBuildSDiv(
1467        arg1: LLVMBuilderRef,
1468        LHS: LLVMValueRef,
1469        RHS: LLVMValueRef,
1470        Name: *const ::libc::c_char,
1471    ) -> LLVMValueRef;
1472    pub fn LLVMBuildExactSDiv(
1473        arg1: LLVMBuilderRef,
1474        LHS: LLVMValueRef,
1475        RHS: LLVMValueRef,
1476        Name: *const ::libc::c_char,
1477    ) -> LLVMValueRef;
1478    pub fn LLVMBuildFDiv(
1479        arg1: LLVMBuilderRef,
1480        LHS: LLVMValueRef,
1481        RHS: LLVMValueRef,
1482        Name: *const ::libc::c_char,
1483    ) -> LLVMValueRef;
1484    pub fn LLVMBuildURem(
1485        arg1: LLVMBuilderRef,
1486        LHS: LLVMValueRef,
1487        RHS: LLVMValueRef,
1488        Name: *const ::libc::c_char,
1489    ) -> LLVMValueRef;
1490    pub fn LLVMBuildSRem(
1491        arg1: LLVMBuilderRef,
1492        LHS: LLVMValueRef,
1493        RHS: LLVMValueRef,
1494        Name: *const ::libc::c_char,
1495    ) -> LLVMValueRef;
1496    pub fn LLVMBuildFRem(
1497        arg1: LLVMBuilderRef,
1498        LHS: LLVMValueRef,
1499        RHS: LLVMValueRef,
1500        Name: *const ::libc::c_char,
1501    ) -> LLVMValueRef;
1502    pub fn LLVMBuildShl(
1503        arg1: LLVMBuilderRef,
1504        LHS: LLVMValueRef,
1505        RHS: LLVMValueRef,
1506        Name: *const ::libc::c_char,
1507    ) -> LLVMValueRef;
1508    pub fn LLVMBuildLShr(
1509        arg1: LLVMBuilderRef,
1510        LHS: LLVMValueRef,
1511        RHS: LLVMValueRef,
1512        Name: *const ::libc::c_char,
1513    ) -> LLVMValueRef;
1514    pub fn LLVMBuildAShr(
1515        arg1: LLVMBuilderRef,
1516        LHS: LLVMValueRef,
1517        RHS: LLVMValueRef,
1518        Name: *const ::libc::c_char,
1519    ) -> LLVMValueRef;
1520    pub fn LLVMBuildAnd(
1521        arg1: LLVMBuilderRef,
1522        LHS: LLVMValueRef,
1523        RHS: LLVMValueRef,
1524        Name: *const ::libc::c_char,
1525    ) -> LLVMValueRef;
1526    pub fn LLVMBuildOr(
1527        arg1: LLVMBuilderRef,
1528        LHS: LLVMValueRef,
1529        RHS: LLVMValueRef,
1530        Name: *const ::libc::c_char,
1531    ) -> LLVMValueRef;
1532    pub fn LLVMBuildXor(
1533        arg1: LLVMBuilderRef,
1534        LHS: LLVMValueRef,
1535        RHS: LLVMValueRef,
1536        Name: *const ::libc::c_char,
1537    ) -> LLVMValueRef;
1538    pub fn LLVMBuildBinOp(
1539        B: LLVMBuilderRef,
1540        Op: LLVMOpcode,
1541        LHS: LLVMValueRef,
1542        RHS: LLVMValueRef,
1543        Name: *const ::libc::c_char,
1544    ) -> LLVMValueRef;
1545    pub fn LLVMBuildNeg(
1546        arg1: LLVMBuilderRef,
1547        V: LLVMValueRef,
1548        Name: *const ::libc::c_char,
1549    ) -> LLVMValueRef;
1550    pub fn LLVMBuildNSWNeg(
1551        B: LLVMBuilderRef,
1552        V: LLVMValueRef,
1553        Name: *const ::libc::c_char,
1554    ) -> LLVMValueRef;
1555    pub fn LLVMBuildNUWNeg(
1556        B: LLVMBuilderRef,
1557        V: LLVMValueRef,
1558        Name: *const ::libc::c_char,
1559    ) -> LLVMValueRef;
1560    pub fn LLVMBuildFNeg(
1561        arg1: LLVMBuilderRef,
1562        V: LLVMValueRef,
1563        Name: *const ::libc::c_char,
1564    ) -> LLVMValueRef;
1565    pub fn LLVMBuildNot(
1566        arg1: LLVMBuilderRef,
1567        V: LLVMValueRef,
1568        Name: *const ::libc::c_char,
1569    ) -> LLVMValueRef;
1570
1571    // Memory
1572    pub fn LLVMBuildMalloc(
1573        arg1: LLVMBuilderRef,
1574        Ty: LLVMTypeRef,
1575        Name: *const ::libc::c_char,
1576    ) -> LLVMValueRef;
1577    pub fn LLVMBuildArrayMalloc(
1578        arg1: LLVMBuilderRef,
1579        Ty: LLVMTypeRef,
1580        Val: LLVMValueRef,
1581        Name: *const ::libc::c_char,
1582    ) -> LLVMValueRef;
1583    pub fn LLVMBuildMemSet(
1584        B: LLVMBuilderRef,
1585        Ptr: LLVMValueRef,
1586        Val: LLVMValueRef,
1587        Len: LLVMValueRef,
1588        Align: ::libc::c_uint,
1589    ) -> LLVMValueRef;
1590    pub fn LLVMBuildMemCpy(
1591        B: LLVMBuilderRef,
1592        Dst: LLVMValueRef,
1593        DstAlign: ::libc::c_uint,
1594        Src: LLVMValueRef,
1595        SrcAlign: ::libc::c_uint,
1596        Size: LLVMValueRef,
1597    ) -> LLVMValueRef;
1598    pub fn LLVMBuildMemMove(
1599        B: LLVMBuilderRef,
1600        Dst: LLVMValueRef,
1601        DstAlign: ::libc::c_uint,
1602        Src: LLVMValueRef,
1603        SrcAlign: ::libc::c_uint,
1604        Size: LLVMValueRef,
1605    ) -> LLVMValueRef;
1606    pub fn LLVMBuildAlloca(
1607        arg1: LLVMBuilderRef,
1608        Ty: LLVMTypeRef,
1609        Name: *const ::libc::c_char,
1610    ) -> LLVMValueRef;
1611    pub fn LLVMBuildArrayAlloca(
1612        arg1: LLVMBuilderRef,
1613        Ty: LLVMTypeRef,
1614        Val: LLVMValueRef,
1615        Name: *const ::libc::c_char,
1616    ) -> LLVMValueRef;
1617    pub fn LLVMBuildFree(arg1: LLVMBuilderRef, PointerVal: LLVMValueRef) -> LLVMValueRef;
1618    pub fn LLVMBuildLoad(
1619        arg1: LLVMBuilderRef,
1620        PointerVal: LLVMValueRef,
1621        Name: *const ::libc::c_char,
1622    ) -> LLVMValueRef;
1623    pub fn LLVMBuildLoad2(
1624        arg1: LLVMBuilderRef,
1625        Ty: LLVMTypeRef,
1626        PointerVal: LLVMValueRef,
1627        Name: *const ::libc::c_char,
1628    ) -> LLVMValueRef;
1629    pub fn LLVMBuildStore(
1630        arg1: LLVMBuilderRef,
1631        Val: LLVMValueRef,
1632        Ptr: LLVMValueRef,
1633    ) -> LLVMValueRef;
1634    pub fn LLVMBuildGEP(
1635        B: LLVMBuilderRef,
1636        Pointer: LLVMValueRef,
1637        Indices: *mut LLVMValueRef,
1638        NumIndices: ::libc::c_uint,
1639        Name: *const ::libc::c_char,
1640    ) -> LLVMValueRef;
1641    pub fn LLVMBuildInBoundsGEP(
1642        B: LLVMBuilderRef,
1643        Pointer: LLVMValueRef,
1644        Indices: *mut LLVMValueRef,
1645        NumIndices: ::libc::c_uint,
1646        Name: *const ::libc::c_char,
1647    ) -> LLVMValueRef;
1648    pub fn LLVMBuildStructGEP(
1649        B: LLVMBuilderRef,
1650        Pointer: LLVMValueRef,
1651        Idx: ::libc::c_uint,
1652        Name: *const ::libc::c_char,
1653    ) -> LLVMValueRef;
1654    pub fn LLVMBuildGEP2(
1655        B: LLVMBuilderRef,
1656        Ty: LLVMTypeRef,
1657        Pointer: LLVMValueRef,
1658        Indices: *mut LLVMValueRef,
1659        NumIndices: ::libc::c_uint,
1660        Name: *const ::libc::c_char,
1661    ) -> LLVMValueRef;
1662    pub fn LLVMBuildInBoundsGEP2(
1663        B: LLVMBuilderRef,
1664        Ty: LLVMTypeRef,
1665        Pointer: LLVMValueRef,
1666        Indices: *mut LLVMValueRef,
1667        NumIndices: ::libc::c_uint,
1668        Name: *const ::libc::c_char,
1669    ) -> LLVMValueRef;
1670    pub fn LLVMBuildStructGEP2(
1671        B: LLVMBuilderRef,
1672        Ty: LLVMTypeRef,
1673        Pointer: LLVMValueRef,
1674        Idx: ::libc::c_uint,
1675        Name: *const ::libc::c_char,
1676    ) -> LLVMValueRef;
1677    pub fn LLVMBuildGlobalString(
1678        B: LLVMBuilderRef,
1679        Str: *const ::libc::c_char,
1680        Name: *const ::libc::c_char,
1681    ) -> LLVMValueRef;
1682    pub fn LLVMBuildGlobalStringPtr(
1683        B: LLVMBuilderRef,
1684        Str: *const ::libc::c_char,
1685        Name: *const ::libc::c_char,
1686    ) -> LLVMValueRef;
1687    pub fn LLVMGetVolatile(MemoryAccessInst: LLVMValueRef) -> LLVMBool;
1688    pub fn LLVMSetVolatile(MemoryAccessInst: LLVMValueRef, IsVolatile: LLVMBool);
1689    #[cfg(LLVM_VERSION_10_OR_GREATER)]
1690    pub fn LLVMGetWeak(CmpXchgInst: LLVMValueRef) -> LLVMBool;
1691    #[cfg(LLVM_VERSION_10_OR_GREATER)]
1692    pub fn LLVMSetWeak(CmpXchgInst: LLVMValueRef, IsWeak: LLVMBool);
1693    pub fn LLVMGetOrdering(MemoryAccessInst: LLVMValueRef) -> LLVMAtomicOrdering;
1694    pub fn LLVMSetOrdering(MemoryAccessInst: LLVMValueRef, Ordering: LLVMAtomicOrdering);
1695    #[cfg(LLVM_VERSION_10_OR_GREATER)]
1696    pub fn LLVMGetAtomicRMWBinOp(AtomicRMWInst: LLVMValueRef) -> LLVMAtomicRMWBinOp;
1697    #[cfg(LLVM_VERSION_10_OR_GREATER)]
1698    pub fn LLVMSetAtomicRMWBinOp(AtomicRMWInst: LLVMValueRef, BinOp: LLVMAtomicRMWBinOp);
1699
1700    // Casts
1701    pub fn LLVMBuildTrunc(
1702        arg1: LLVMBuilderRef,
1703        Val: LLVMValueRef,
1704        DestTy: LLVMTypeRef,
1705        Name: *const ::libc::c_char,
1706    ) -> LLVMValueRef;
1707    pub fn LLVMBuildZExt(
1708        arg1: LLVMBuilderRef,
1709        Val: LLVMValueRef,
1710        DestTy: LLVMTypeRef,
1711        Name: *const ::libc::c_char,
1712    ) -> LLVMValueRef;
1713    pub fn LLVMBuildSExt(
1714        arg1: LLVMBuilderRef,
1715        Val: LLVMValueRef,
1716        DestTy: LLVMTypeRef,
1717        Name: *const ::libc::c_char,
1718    ) -> LLVMValueRef;
1719    pub fn LLVMBuildFPToUI(
1720        arg1: LLVMBuilderRef,
1721        Val: LLVMValueRef,
1722        DestTy: LLVMTypeRef,
1723        Name: *const ::libc::c_char,
1724    ) -> LLVMValueRef;
1725    pub fn LLVMBuildFPToSI(
1726        arg1: LLVMBuilderRef,
1727        Val: LLVMValueRef,
1728        DestTy: LLVMTypeRef,
1729        Name: *const ::libc::c_char,
1730    ) -> LLVMValueRef;
1731    pub fn LLVMBuildUIToFP(
1732        arg1: LLVMBuilderRef,
1733        Val: LLVMValueRef,
1734        DestTy: LLVMTypeRef,
1735        Name: *const ::libc::c_char,
1736    ) -> LLVMValueRef;
1737    pub fn LLVMBuildSIToFP(
1738        arg1: LLVMBuilderRef,
1739        Val: LLVMValueRef,
1740        DestTy: LLVMTypeRef,
1741        Name: *const ::libc::c_char,
1742    ) -> LLVMValueRef;
1743    pub fn LLVMBuildFPTrunc(
1744        arg1: LLVMBuilderRef,
1745        Val: LLVMValueRef,
1746        DestTy: LLVMTypeRef,
1747        Name: *const ::libc::c_char,
1748    ) -> LLVMValueRef;
1749    pub fn LLVMBuildFPExt(
1750        arg1: LLVMBuilderRef,
1751        Val: LLVMValueRef,
1752        DestTy: LLVMTypeRef,
1753        Name: *const ::libc::c_char,
1754    ) -> LLVMValueRef;
1755    pub fn LLVMBuildPtrToInt(
1756        arg1: LLVMBuilderRef,
1757        Val: LLVMValueRef,
1758        DestTy: LLVMTypeRef,
1759        Name: *const ::libc::c_char,
1760    ) -> LLVMValueRef;
1761    pub fn LLVMBuildIntToPtr(
1762        arg1: LLVMBuilderRef,
1763        Val: LLVMValueRef,
1764        DestTy: LLVMTypeRef,
1765        Name: *const ::libc::c_char,
1766    ) -> LLVMValueRef;
1767    pub fn LLVMBuildBitCast(
1768        arg1: LLVMBuilderRef,
1769        Val: LLVMValueRef,
1770        DestTy: LLVMTypeRef,
1771        Name: *const ::libc::c_char,
1772    ) -> LLVMValueRef;
1773    pub fn LLVMBuildAddrSpaceCast(
1774        arg1: LLVMBuilderRef,
1775        Val: LLVMValueRef,
1776        DestTy: LLVMTypeRef,
1777        Name: *const ::libc::c_char,
1778    ) -> LLVMValueRef;
1779    pub fn LLVMBuildZExtOrBitCast(
1780        arg1: LLVMBuilderRef,
1781        Val: LLVMValueRef,
1782        DestTy: LLVMTypeRef,
1783        Name: *const ::libc::c_char,
1784    ) -> LLVMValueRef;
1785    pub fn LLVMBuildSExtOrBitCast(
1786        arg1: LLVMBuilderRef,
1787        Val: LLVMValueRef,
1788        DestTy: LLVMTypeRef,
1789        Name: *const ::libc::c_char,
1790    ) -> LLVMValueRef;
1791    pub fn LLVMBuildTruncOrBitCast(
1792        arg1: LLVMBuilderRef,
1793        Val: LLVMValueRef,
1794        DestTy: LLVMTypeRef,
1795        Name: *const ::libc::c_char,
1796    ) -> LLVMValueRef;
1797    pub fn LLVMBuildCast(
1798        B: LLVMBuilderRef,
1799        Op: LLVMOpcode,
1800        Val: LLVMValueRef,
1801        DestTy: LLVMTypeRef,
1802        Name: *const ::libc::c_char,
1803    ) -> LLVMValueRef;
1804    pub fn LLVMBuildPointerCast(
1805        arg1: LLVMBuilderRef,
1806        Val: LLVMValueRef,
1807        DestTy: LLVMTypeRef,
1808        Name: *const ::libc::c_char,
1809    ) -> LLVMValueRef;
1810    pub fn LLVMBuildIntCast(
1811        arg1: LLVMBuilderRef,
1812        Val: LLVMValueRef,
1813        DestTy: LLVMTypeRef,
1814        Name: *const ::libc::c_char,
1815    ) -> LLVMValueRef;
1816    pub fn LLVMBuildIntCast2(
1817        arg1: LLVMBuilderRef,
1818        Val: LLVMValueRef,
1819        DestTy: LLVMTypeRef,
1820        IsSigned: LLVMBool,
1821        Name: *const ::libc::c_char,
1822    ) -> LLVMValueRef;
1823    pub fn LLVMBuildFPCast(
1824        arg1: LLVMBuilderRef,
1825        Val: LLVMValueRef,
1826        DestTy: LLVMTypeRef,
1827        Name: *const ::libc::c_char,
1828    ) -> LLVMValueRef;
1829
1830    // Comparisons
1831    pub fn LLVMBuildICmp(
1832        arg1: LLVMBuilderRef,
1833        Op: LLVMIntPredicate,
1834        LHS: LLVMValueRef,
1835        RHS: LLVMValueRef,
1836        Name: *const ::libc::c_char,
1837    ) -> LLVMValueRef;
1838    pub fn LLVMBuildFCmp(
1839        arg1: LLVMBuilderRef,
1840        Op: LLVMRealPredicate,
1841        LHS: LLVMValueRef,
1842        RHS: LLVMValueRef,
1843        Name: *const ::libc::c_char,
1844    ) -> LLVMValueRef;
1845
1846    // Miscellaneous instructions
1847    pub fn LLVMBuildPhi(
1848        arg1: LLVMBuilderRef,
1849        Ty: LLVMTypeRef,
1850        Name: *const ::libc::c_char,
1851    ) -> LLVMValueRef;
1852    pub fn LLVMBuildCall(
1853        arg1: LLVMBuilderRef,
1854        Fn: LLVMValueRef,
1855        Args: *mut LLVMValueRef,
1856        NumArgs: ::libc::c_uint,
1857        Name: *const ::libc::c_char,
1858    ) -> LLVMValueRef;
1859    pub fn LLVMBuildCall2(
1860        arg1: LLVMBuilderRef,
1861        arg2: LLVMTypeRef,
1862        Fn: LLVMValueRef,
1863        Args: *mut LLVMValueRef,
1864        NumArgs: ::libc::c_uint,
1865        Name: *const ::libc::c_char,
1866    ) -> LLVMValueRef;
1867    pub fn LLVMBuildSelect(
1868        arg1: LLVMBuilderRef,
1869        If: LLVMValueRef,
1870        Then: LLVMValueRef,
1871        Else: LLVMValueRef,
1872        Name: *const ::libc::c_char,
1873    ) -> LLVMValueRef;
1874    pub fn LLVMBuildVAArg(
1875        arg1: LLVMBuilderRef,
1876        List: LLVMValueRef,
1877        Ty: LLVMTypeRef,
1878        Name: *const ::libc::c_char,
1879    ) -> LLVMValueRef;
1880    pub fn LLVMBuildExtractElement(
1881        arg1: LLVMBuilderRef,
1882        VecVal: LLVMValueRef,
1883        Index: LLVMValueRef,
1884        Name: *const ::libc::c_char,
1885    ) -> LLVMValueRef;
1886    pub fn LLVMBuildInsertElement(
1887        arg1: LLVMBuilderRef,
1888        VecVal: LLVMValueRef,
1889        EltVal: LLVMValueRef,
1890        Index: LLVMValueRef,
1891        Name: *const ::libc::c_char,
1892    ) -> LLVMValueRef;
1893    pub fn LLVMBuildShuffleVector(
1894        arg1: LLVMBuilderRef,
1895        V1: LLVMValueRef,
1896        V2: LLVMValueRef,
1897        Mask: LLVMValueRef,
1898        Name: *const ::libc::c_char,
1899    ) -> LLVMValueRef;
1900    pub fn LLVMBuildExtractValue(
1901        arg1: LLVMBuilderRef,
1902        AggVal: LLVMValueRef,
1903        Index: ::libc::c_uint,
1904        Name: *const ::libc::c_char,
1905    ) -> LLVMValueRef;
1906    pub fn LLVMBuildInsertValue(
1907        arg1: LLVMBuilderRef,
1908        AggVal: LLVMValueRef,
1909        EltVal: LLVMValueRef,
1910        Index: ::libc::c_uint,
1911        Name: *const ::libc::c_char,
1912    ) -> LLVMValueRef;
1913    #[cfg(LLVM_VERSION_10_OR_GREATER)]
1914    pub fn LLVMBuildFreeze(
1915        arg1: LLVMBuilderRef,
1916        Val: LLVMValueRef,
1917        Name: *const ::libc::c_char,
1918    ) -> LLVMValueRef;
1919    pub fn LLVMBuildIsNull(
1920        arg1: LLVMBuilderRef,
1921        Val: LLVMValueRef,
1922        Name: *const ::libc::c_char,
1923    ) -> LLVMValueRef;
1924    pub fn LLVMBuildIsNotNull(
1925        arg1: LLVMBuilderRef,
1926        Val: LLVMValueRef,
1927        Name: *const ::libc::c_char,
1928    ) -> LLVMValueRef;
1929    pub fn LLVMBuildPtrDiff(
1930        arg1: LLVMBuilderRef,
1931        LHS: LLVMValueRef,
1932        RHS: LLVMValueRef,
1933        Name: *const ::libc::c_char,
1934    ) -> LLVMValueRef;
1935    pub fn LLVMBuildFence(
1936        B: LLVMBuilderRef,
1937        ordering: LLVMAtomicOrdering,
1938        singleThread: LLVMBool,
1939        Name: *const ::libc::c_char,
1940    ) -> LLVMValueRef;
1941    pub fn LLVMBuildAtomicRMW(
1942        B: LLVMBuilderRef,
1943        op: LLVMAtomicRMWBinOp,
1944        PTR: LLVMValueRef,
1945        Val: LLVMValueRef,
1946        ordering: LLVMAtomicOrdering,
1947        singleThread: LLVMBool,
1948    ) -> LLVMValueRef;
1949    pub fn LLVMBuildAtomicCmpXchg(
1950        B: LLVMBuilderRef,
1951        Ptr: LLVMValueRef,
1952        Cmp: LLVMValueRef,
1953        New: LLVMValueRef,
1954        SuccessOrdering: LLVMAtomicOrdering,
1955        FailureOrdering: LLVMAtomicOrdering,
1956        SingleThread: LLVMBool,
1957    ) -> LLVMValueRef;
1958    pub fn LLVMIsAtomicSingleThread(AtomicInst: LLVMValueRef) -> LLVMBool;
1959    pub fn LLVMSetAtomicSingleThread(AtomicInst: LLVMValueRef, SingleThread: LLVMBool);
1960    pub fn LLVMGetCmpXchgSuccessOrdering(CmpXchgInst: LLVMValueRef) -> LLVMAtomicOrdering;
1961    pub fn LLVMSetCmpXchgSuccessOrdering(CmpXchgInst: LLVMValueRef, Ordering: LLVMAtomicOrdering);
1962    pub fn LLVMGetCmpXchgFailureOrdering(CmpXchgInst: LLVMValueRef) -> LLVMAtomicOrdering;
1963    pub fn LLVMSetCmpXchgFailureOrdering(CmpXchgInst: LLVMValueRef, Ordering: LLVMAtomicOrdering);
1964}
1965
1966// Core->Module Providers
1967extern "C" {
1968    pub fn LLVMCreateModuleProviderForExistingModule(M: LLVMModuleRef) -> LLVMModuleProviderRef;
1969    pub fn LLVMDisposeModuleProvider(M: LLVMModuleProviderRef);
1970}
1971
1972// Core->Memory Buffers
1973extern "C" {
1974    pub fn LLVMCreateMemoryBufferWithContentsOfFile(
1975        Path: *const ::libc::c_char,
1976        OutMemBuf: *mut LLVMMemoryBufferRef,
1977        OutMessage: *mut *mut ::libc::c_char,
1978    ) -> LLVMBool;
1979    pub fn LLVMCreateMemoryBufferWithSTDIN(
1980        OutMemBuf: *mut LLVMMemoryBufferRef,
1981        OutMessage: *mut *mut ::libc::c_char,
1982    ) -> LLVMBool;
1983    pub fn LLVMCreateMemoryBufferWithMemoryRange(
1984        InputData: *const ::libc::c_char,
1985        InputDataLength: ::libc::size_t,
1986        BufferName: *const ::libc::c_char,
1987        RequiresNullTerminator: LLVMBool,
1988    ) -> LLVMMemoryBufferRef;
1989    pub fn LLVMCreateMemoryBufferWithMemoryRangeCopy(
1990        InputData: *const ::libc::c_char,
1991        InputDataLength: ::libc::size_t,
1992        BufferName: *const ::libc::c_char,
1993    ) -> LLVMMemoryBufferRef;
1994    pub fn LLVMGetBufferStart(MemBuf: LLVMMemoryBufferRef) -> *const ::libc::c_char;
1995    pub fn LLVMGetBufferSize(MemBuf: LLVMMemoryBufferRef) -> ::libc::size_t;
1996    pub fn LLVMDisposeMemoryBuffer(MemBuf: LLVMMemoryBufferRef);
1997}
1998
1999// Core->pass registry
2000extern "C" {
2001    pub fn LLVMGetGlobalPassRegistry() -> LLVMPassRegistryRef;
2002}
2003
2004// Core->Pass managers
2005extern "C" {
2006    pub fn LLVMCreatePassManager() -> LLVMPassManagerRef;
2007    pub fn LLVMCreateFunctionPassManagerForModule(M: LLVMModuleRef) -> LLVMPassManagerRef;
2008    pub fn LLVMCreateFunctionPassManager(MP: LLVMModuleProviderRef) -> LLVMPassManagerRef;
2009    pub fn LLVMRunPassManager(PM: LLVMPassManagerRef, M: LLVMModuleRef) -> LLVMBool;
2010    pub fn LLVMInitializeFunctionPassManager(FPM: LLVMPassManagerRef) -> LLVMBool;
2011    pub fn LLVMRunFunctionPassManager(FPM: LLVMPassManagerRef, F: LLVMValueRef) -> LLVMBool;
2012    pub fn LLVMFinalizeFunctionPassManager(FPM: LLVMPassManagerRef) -> LLVMBool;
2013    pub fn LLVMDisposePassManager(PM: LLVMPassManagerRef);
2014}
2015
2016// Core->Threading
2017extern "C" {
2018    /// Deprecated: LLVM threading is configured at compile-time with `LLVM_ENABLE_THREADS`
2019    pub fn LLVMStartMultithreaded() -> LLVMBool;
2020    /// Deprecated: LLVM threading is configured at compile-time with `LLVM_ENABLE_THREADS`
2021    pub fn LLVMStopMultithreaded();
2022    pub fn LLVMIsMultithreaded() -> LLVMBool;
2023}