1 #![allow(non_camel_case_types)]
2 #![allow(non_upper_case_globals)]
4 use rustc_codegen_ssa
::coverageinfo
::map
as coverage_map
;
6 use super::debuginfo
::{
7 DIArray
, DIBasicType
, DIBuilder
, DICompositeType
, DIDerivedType
, DIDescriptor
, DIEnumerator
,
8 DIFile
, DIFlags
, DIGlobalVariableExpression
, DILexicalBlock
, DILocation
, DINameSpace
,
9 DISPFlags
, DIScope
, DISubprogram
, DISubrange
, DITemplateTypeParameter
, DIType
, DIVariable
,
13 use libc
::{c_char, c_int, c_uint, size_t}
;
14 use libc
::{c_ulonglong, c_void}
;
16 use std
::marker
::PhantomData
;
18 use super::RustString
;
20 pub type Bool
= c_uint
;
22 pub const True
: Bool
= 1 as Bool
;
23 pub const False
: Bool
= 0 as Bool
;
25 #[derive(Copy, Clone, PartialEq)]
27 #[allow(dead_code)] // Variants constructed by C++.
28 pub enum LLVMRustResult
{
33 // Rust version of the C struct with the same name in rustc_llvm/llvm-wrapper/RustWrapper.cpp.
35 pub struct LLVMRustCOFFShortExport
{
36 pub name
: *const c_char
,
37 pub ordinal_present
: bool
,
38 // value of `ordinal` only important when `ordinal_present` is true
42 impl LLVMRustCOFFShortExport
{
43 pub fn new(name
: *const c_char
, ordinal
: Option
<u16>) -> LLVMRustCOFFShortExport
{
44 LLVMRustCOFFShortExport
{
46 ordinal_present
: ordinal
.is_some(),
47 ordinal
: ordinal
.unwrap_or(0),
52 /// Translation of LLVM's MachineTypes enum, defined in llvm\include\llvm\BinaryFormat\COFF.h.
54 /// We include only architectures supported on Windows.
55 #[derive(Copy, Clone, PartialEq)]
57 pub enum LLVMMachineType
{
64 /// LLVM's Module::ModFlagBehavior, defined in llvm/include/llvm/IR/Module.h.
66 /// When merging modules (e.g. during LTO), their metadata flags are combined. Conflicts are
67 /// resolved according to the merge behaviors specified here. Flags differing only in merge
68 /// behavior are still considered to be in conflict.
70 /// In order for Rust-C LTO to work, we must specify behaviors compatible with Clang. Notably,
71 /// 'Error' and 'Warning' cannot be mixed for a given flag.
72 #[derive(Copy, Clone, PartialEq)]
74 pub enum LLVMModFlagBehavior
{
84 // Consts for the LLVM CallConv type, pre-cast to usize.
86 /// LLVM CallingConv::ID. Should we wrap this?
87 #[derive(Copy, Clone, PartialEq, Debug)]
93 X86StdcallCallConv
= 64,
94 X86FastcallCallConv
= 65,
95 ArmAapcsCallConv
= 67,
103 AvrNonBlockingInterrupt
= 84,
109 #[derive(Copy, Clone, PartialEq)]
113 AvailableExternallyLinkage
= 1,
114 LinkOnceAnyLinkage
= 2,
115 LinkOnceODRLinkage
= 3,
118 AppendingLinkage
= 6,
121 ExternalWeakLinkage
= 9,
125 // LLVMRustVisibility
127 #[derive(Copy, Clone, PartialEq)]
128 pub enum Visibility
{
136 pub enum UnnamedAddr
{
142 /// LLVMDLLStorageClass
143 #[derive(Copy, Clone)]
145 pub enum DLLStorageClass
{
148 DllImport
= 1, // Function to be imported from DLL.
150 DllExport
= 2, // Function to be accessible from DLL.
153 /// Matches LLVMRustAttribute in LLVMWrapper.h
154 /// Semantically a subset of the C++ enum llvm::Attribute::AttrKind,
155 /// though it is not ABI compatible (since it's a C++ enum)
157 #[derive(Copy, Clone, Debug)]
158 pub enum AttributeKind
{
172 OptimizeForSize
= 13,
180 SanitizeAddress
= 21,
186 InaccessibleMemOnly
= 27,
187 SanitizeHWAddress
= 28,
189 StackProtectReq
= 30,
190 StackProtectStrong
= 31,
197 #[derive(Copy, Clone)]
199 pub enum IntPredicate
{
213 pub fn from_generic(intpre
: rustc_codegen_ssa
::common
::IntPredicate
) -> Self {
215 rustc_codegen_ssa
::common
::IntPredicate
::IntEQ
=> IntPredicate
::IntEQ
,
216 rustc_codegen_ssa
::common
::IntPredicate
::IntNE
=> IntPredicate
::IntNE
,
217 rustc_codegen_ssa
::common
::IntPredicate
::IntUGT
=> IntPredicate
::IntUGT
,
218 rustc_codegen_ssa
::common
::IntPredicate
::IntUGE
=> IntPredicate
::IntUGE
,
219 rustc_codegen_ssa
::common
::IntPredicate
::IntULT
=> IntPredicate
::IntULT
,
220 rustc_codegen_ssa
::common
::IntPredicate
::IntULE
=> IntPredicate
::IntULE
,
221 rustc_codegen_ssa
::common
::IntPredicate
::IntSGT
=> IntPredicate
::IntSGT
,
222 rustc_codegen_ssa
::common
::IntPredicate
::IntSGE
=> IntPredicate
::IntSGE
,
223 rustc_codegen_ssa
::common
::IntPredicate
::IntSLT
=> IntPredicate
::IntSLT
,
224 rustc_codegen_ssa
::common
::IntPredicate
::IntSLE
=> IntPredicate
::IntSLE
,
229 /// LLVMRealPredicate
230 #[derive(Copy, Clone)]
232 pub enum RealPredicate
{
233 RealPredicateFalse
= 0,
248 RealPredicateTrue
= 15,
252 pub fn from_generic(realp
: rustc_codegen_ssa
::common
::RealPredicate
) -> Self {
254 rustc_codegen_ssa
::common
::RealPredicate
::RealPredicateFalse
=> {
255 RealPredicate
::RealPredicateFalse
257 rustc_codegen_ssa
::common
::RealPredicate
::RealOEQ
=> RealPredicate
::RealOEQ
,
258 rustc_codegen_ssa
::common
::RealPredicate
::RealOGT
=> RealPredicate
::RealOGT
,
259 rustc_codegen_ssa
::common
::RealPredicate
::RealOGE
=> RealPredicate
::RealOGE
,
260 rustc_codegen_ssa
::common
::RealPredicate
::RealOLT
=> RealPredicate
::RealOLT
,
261 rustc_codegen_ssa
::common
::RealPredicate
::RealOLE
=> RealPredicate
::RealOLE
,
262 rustc_codegen_ssa
::common
::RealPredicate
::RealONE
=> RealPredicate
::RealONE
,
263 rustc_codegen_ssa
::common
::RealPredicate
::RealORD
=> RealPredicate
::RealORD
,
264 rustc_codegen_ssa
::common
::RealPredicate
::RealUNO
=> RealPredicate
::RealUNO
,
265 rustc_codegen_ssa
::common
::RealPredicate
::RealUEQ
=> RealPredicate
::RealUEQ
,
266 rustc_codegen_ssa
::common
::RealPredicate
::RealUGT
=> RealPredicate
::RealUGT
,
267 rustc_codegen_ssa
::common
::RealPredicate
::RealUGE
=> RealPredicate
::RealUGE
,
268 rustc_codegen_ssa
::common
::RealPredicate
::RealULT
=> RealPredicate
::RealULT
,
269 rustc_codegen_ssa
::common
::RealPredicate
::RealULE
=> RealPredicate
::RealULE
,
270 rustc_codegen_ssa
::common
::RealPredicate
::RealUNE
=> RealPredicate
::RealUNE
,
271 rustc_codegen_ssa
::common
::RealPredicate
::RealPredicateTrue
=> {
272 RealPredicate
::RealPredicateTrue
279 #[derive(Copy, Clone, PartialEq, Debug)]
305 pub fn to_generic(self) -> rustc_codegen_ssa
::common
::TypeKind
{
307 TypeKind
::Void
=> rustc_codegen_ssa
::common
::TypeKind
::Void
,
308 TypeKind
::Half
=> rustc_codegen_ssa
::common
::TypeKind
::Half
,
309 TypeKind
::Float
=> rustc_codegen_ssa
::common
::TypeKind
::Float
,
310 TypeKind
::Double
=> rustc_codegen_ssa
::common
::TypeKind
::Double
,
311 TypeKind
::X86_FP80
=> rustc_codegen_ssa
::common
::TypeKind
::X86_FP80
,
312 TypeKind
::FP128
=> rustc_codegen_ssa
::common
::TypeKind
::FP128
,
313 TypeKind
::PPC_FP128
=> rustc_codegen_ssa
::common
::TypeKind
::PPC_FP128
,
314 TypeKind
::Label
=> rustc_codegen_ssa
::common
::TypeKind
::Label
,
315 TypeKind
::Integer
=> rustc_codegen_ssa
::common
::TypeKind
::Integer
,
316 TypeKind
::Function
=> rustc_codegen_ssa
::common
::TypeKind
::Function
,
317 TypeKind
::Struct
=> rustc_codegen_ssa
::common
::TypeKind
::Struct
,
318 TypeKind
::Array
=> rustc_codegen_ssa
::common
::TypeKind
::Array
,
319 TypeKind
::Pointer
=> rustc_codegen_ssa
::common
::TypeKind
::Pointer
,
320 TypeKind
::Vector
=> rustc_codegen_ssa
::common
::TypeKind
::Vector
,
321 TypeKind
::Metadata
=> rustc_codegen_ssa
::common
::TypeKind
::Metadata
,
322 TypeKind
::X86_MMX
=> rustc_codegen_ssa
::common
::TypeKind
::X86_MMX
,
323 TypeKind
::Token
=> rustc_codegen_ssa
::common
::TypeKind
::Token
,
324 TypeKind
::ScalableVector
=> rustc_codegen_ssa
::common
::TypeKind
::ScalableVector
,
325 TypeKind
::BFloat
=> rustc_codegen_ssa
::common
::TypeKind
::BFloat
,
326 TypeKind
::X86_AMX
=> rustc_codegen_ssa
::common
::TypeKind
::X86_AMX
,
331 /// LLVMAtomicRmwBinOp
332 #[derive(Copy, Clone)]
334 pub enum AtomicRmwBinOp
{
348 impl AtomicRmwBinOp
{
349 pub fn from_generic(op
: rustc_codegen_ssa
::common
::AtomicRmwBinOp
) -> Self {
351 rustc_codegen_ssa
::common
::AtomicRmwBinOp
::AtomicXchg
=> AtomicRmwBinOp
::AtomicXchg
,
352 rustc_codegen_ssa
::common
::AtomicRmwBinOp
::AtomicAdd
=> AtomicRmwBinOp
::AtomicAdd
,
353 rustc_codegen_ssa
::common
::AtomicRmwBinOp
::AtomicSub
=> AtomicRmwBinOp
::AtomicSub
,
354 rustc_codegen_ssa
::common
::AtomicRmwBinOp
::AtomicAnd
=> AtomicRmwBinOp
::AtomicAnd
,
355 rustc_codegen_ssa
::common
::AtomicRmwBinOp
::AtomicNand
=> AtomicRmwBinOp
::AtomicNand
,
356 rustc_codegen_ssa
::common
::AtomicRmwBinOp
::AtomicOr
=> AtomicRmwBinOp
::AtomicOr
,
357 rustc_codegen_ssa
::common
::AtomicRmwBinOp
::AtomicXor
=> AtomicRmwBinOp
::AtomicXor
,
358 rustc_codegen_ssa
::common
::AtomicRmwBinOp
::AtomicMax
=> AtomicRmwBinOp
::AtomicMax
,
359 rustc_codegen_ssa
::common
::AtomicRmwBinOp
::AtomicMin
=> AtomicRmwBinOp
::AtomicMin
,
360 rustc_codegen_ssa
::common
::AtomicRmwBinOp
::AtomicUMax
=> AtomicRmwBinOp
::AtomicUMax
,
361 rustc_codegen_ssa
::common
::AtomicRmwBinOp
::AtomicUMin
=> AtomicRmwBinOp
::AtomicUMin
,
366 /// LLVMAtomicOrdering
367 #[derive(Copy, Clone)]
369 pub enum AtomicOrdering
{
374 // Consume = 3, // Not specified yet.
378 SequentiallyConsistent
= 7,
381 impl AtomicOrdering
{
382 pub fn from_generic(ao
: rustc_codegen_ssa
::common
::AtomicOrdering
) -> Self {
384 rustc_codegen_ssa
::common
::AtomicOrdering
::Unordered
=> AtomicOrdering
::Unordered
,
385 rustc_codegen_ssa
::common
::AtomicOrdering
::Relaxed
=> AtomicOrdering
::Monotonic
,
386 rustc_codegen_ssa
::common
::AtomicOrdering
::Acquire
=> AtomicOrdering
::Acquire
,
387 rustc_codegen_ssa
::common
::AtomicOrdering
::Release
=> AtomicOrdering
::Release
,
388 rustc_codegen_ssa
::common
::AtomicOrdering
::AcquireRelease
=> {
389 AtomicOrdering
::AcquireRelease
391 rustc_codegen_ssa
::common
::AtomicOrdering
::SequentiallyConsistent
=> {
392 AtomicOrdering
::SequentiallyConsistent
398 /// LLVMRustSynchronizationScope
399 #[derive(Copy, Clone)]
401 pub enum SynchronizationScope
{
406 impl SynchronizationScope
{
407 pub fn from_generic(sc
: rustc_codegen_ssa
::common
::SynchronizationScope
) -> Self {
409 rustc_codegen_ssa
::common
::SynchronizationScope
::SingleThread
=> {
410 SynchronizationScope
::SingleThread
412 rustc_codegen_ssa
::common
::SynchronizationScope
::CrossThread
=> {
413 SynchronizationScope
::CrossThread
420 #[derive(Copy, Clone)]
428 #[derive(Copy, Clone)]
430 pub enum MetadataType
{
437 MD_invariant_load
= 6,
441 MD_mem_parallel_loop_access
= 10,
445 MD_vcall_visibility
= 28,
449 /// LLVMRustAsmDialect
450 #[derive(Copy, Clone, PartialEq)]
452 pub enum AsmDialect
{
457 /// LLVMRustCodeGenOptLevel
458 #[derive(Copy, Clone, PartialEq)]
460 pub enum CodeGenOptLevel
{
467 /// LLVMRustPassBuilderOptLevel
469 pub enum PassBuilderOptLevel
{
489 /// LLVMRustSanitizerOptions
491 pub struct SanitizerOptions
{
492 pub sanitize_address
: bool
,
493 pub sanitize_address_recover
: bool
,
494 pub sanitize_memory
: bool
,
495 pub sanitize_memory_recover
: bool
,
496 pub sanitize_memory_track_origins
: c_int
,
497 pub sanitize_thread
: bool
,
498 pub sanitize_hwaddress
: bool
,
499 pub sanitize_hwaddress_recover
: bool
,
503 #[derive(Copy, Clone, PartialEq)]
505 pub enum RelocModel
{
514 /// LLVMRustCodeModel
515 #[derive(Copy, Clone)]
526 /// LLVMRustDiagnosticKind
527 #[derive(Copy, Clone)]
529 #[allow(dead_code)] // Variants constructed by C++.
530 pub enum DiagnosticKind
{
534 DebugMetadataVersion
,
537 OptimizationRemarkMissed
,
538 OptimizationRemarkAnalysis
,
539 OptimizationRemarkAnalysisFPCommute
,
540 OptimizationRemarkAnalysisAliasing
,
541 OptimizationRemarkOther
,
549 /// LLVMRustDiagnosticLevel
550 #[derive(Copy, Clone)]
552 #[allow(dead_code)] // Variants constructed by C++.
553 pub enum DiagnosticLevel
{
560 /// LLVMRustArchiveKind
561 #[derive(Copy, Clone)]
563 pub enum ArchiveKind
{
571 #[derive(Copy, Clone, PartialEq, Debug)]
573 #[allow(dead_code)] // Variants constructed by C++.
580 // LLVMRustThinLTOData
582 pub type ThinLTOData
;
585 // LLVMRustThinLTOBuffer
587 pub type ThinLTOBuffer
;
590 // LLVMRustModuleNameCallback
591 pub type ThinLTOModuleNameCallback
=
592 unsafe extern "C" fn(*mut c_void
, *const c_char
, *const c_char
);
594 /// LLVMRustThinLTOModule
596 pub struct ThinLTOModule
{
597 pub identifier
: *const c_char
,
602 /// LLVMThreadLocalMode
603 #[derive(Copy, Clone)]
605 pub enum ThreadLocalMode
{
613 /// LLVMRustChecksumKind
614 #[derive(Copy, Clone)]
616 pub enum ChecksumKind
{
627 struct InvariantOpaque
<'a
> {
628 _marker
: PhantomData
<&'a
mut &'
a ()>,
632 // Opaque pointer types
646 pub type ConstantInt
;
658 pub struct Builder
<'a
>(InvariantOpaque
<'a
>);
660 pub type MemoryBuffer
;
663 pub struct PassManager
<'a
>(InvariantOpaque
<'a
>);
665 pub type PassManagerBuilder
;
671 pub type TargetMachine
;
677 pub struct ArchiveIterator
<'a
>(InvariantOpaque
<'a
>);
679 pub struct ArchiveChild
<'a
>(InvariantOpaque
<'a
>);
684 pub type DiagnosticInfo
;
687 pub type SMDiagnostic
;
690 pub struct RustArchiveMember
<'a
>(InvariantOpaque
<'a
>);
692 pub struct OperandBundleDef
<'a
>(InvariantOpaque
<'a
>);
694 pub struct Linker
<'a
>(InvariantOpaque
<'a
>);
697 pub type DiagnosticHandler
;
700 pub type DiagnosticHandlerTy
= unsafe extern "C" fn(&DiagnosticInfo
, *mut c_void
);
701 pub type InlineAsmDiagHandlerTy
= unsafe extern "C" fn(&SMDiagnostic
, *const c_void
, c_uint
);
703 pub mod coverageinfo
{
704 use super::coverage_map
;
706 /// Aligns with [llvm::coverage::CounterMappingRegion::RegionKind](https://github.com/rust-lang/llvm-project/blob/rustc/13.0-2021-09-30/llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h#L209-L230)
707 #[derive(Copy, Clone, Debug)]
709 pub enum RegionKind
{
710 /// A CodeRegion associates some code with a counter
713 /// An ExpansionRegion represents a file expansion region that associates
714 /// a source range with the expansion of a virtual source file, such as
715 /// for a macro instantiation or #include file.
718 /// A SkippedRegion represents a source range with code that was skipped
719 /// by a preprocessor or similar means.
722 /// A GapRegion is like a CodeRegion, but its count is only set as the
723 /// line execution count when its the only region in the line.
726 /// A BranchRegion represents leaf-level boolean expressions and is
727 /// associated with two counters, each representing the number of times the
728 /// expression evaluates to true or false.
732 /// This struct provides LLVM's representation of a "CoverageMappingRegion", encoded into the
733 /// coverage map, in accordance with the
734 /// [LLVM Code Coverage Mapping Format](https://github.com/rust-lang/llvm-project/blob/rustc/13.0-2021-09-30/llvm/docs/CoverageMappingFormat.rst#llvm-code-coverage-mapping-format).
735 /// The struct composes fields representing the `Counter` type and value(s) (injected counter
736 /// ID, or expression type and operands), the source file (an indirect index into a "filenames
737 /// array", encoded separately), and source location (start and end positions of the represented
740 /// Matches LLVMRustCounterMappingRegion.
741 #[derive(Copy, Clone, Debug)]
743 pub struct CounterMappingRegion
{
744 /// The counter type and type-dependent counter data, if any.
745 counter
: coverage_map
::Counter
,
747 /// If the `RegionKind` is a `BranchRegion`, this represents the counter
748 /// for the false branch of the region.
749 false_counter
: coverage_map
::Counter
,
751 /// An indirect reference to the source filename. In the LLVM Coverage Mapping Format, the
752 /// file_id is an index into a function-specific `virtual_file_mapping` array of indexes
753 /// that, in turn, are used to look up the filename for this region.
756 /// If the `RegionKind` is an `ExpansionRegion`, the `expanded_file_id` can be used to find
757 /// the mapping regions created as a result of macro expansion, by checking if their file id
758 /// matches the expanded file id.
759 expanded_file_id
: u32,
761 /// 1-based starting line of the mapping region.
764 /// 1-based starting column of the mapping region.
767 /// 1-based ending line of the mapping region.
770 /// 1-based ending column of the mapping region. If the high bit is set, the current
771 /// mapping region is a gap area.
777 impl CounterMappingRegion
{
778 pub(crate) fn code_region(
779 counter
: coverage_map
::Counter
,
788 false_counter
: coverage_map
::Counter
::zero(),
795 kind
: RegionKind
::CodeRegion
,
799 // This function might be used in the future; the LLVM API is still evolving, as is coverage
802 pub(crate) fn branch_region(
803 counter
: coverage_map
::Counter
,
804 false_counter
: coverage_map
::Counter
,
820 kind
: RegionKind
::BranchRegion
,
824 // This function might be used in the future; the LLVM API is still evolving, as is coverage
827 pub(crate) fn expansion_region(
829 expanded_file_id
: u32,
836 counter
: coverage_map
::Counter
::zero(),
837 false_counter
: coverage_map
::Counter
::zero(),
844 kind
: RegionKind
::ExpansionRegion
,
848 // This function might be used in the future; the LLVM API is still evolving, as is coverage
851 pub(crate) fn skipped_region(
859 counter
: coverage_map
::Counter
::zero(),
860 false_counter
: coverage_map
::Counter
::zero(),
867 kind
: RegionKind
::SkippedRegion
,
871 // This function might be used in the future; the LLVM API is still evolving, as is coverage
874 pub(crate) fn gap_region(
875 counter
: coverage_map
::Counter
,
884 false_counter
: coverage_map
::Counter
::zero(),
890 end_col
: (1_u32 << 31) | end_col
,
891 kind
: RegionKind
::GapRegion
,
898 use super::{InvariantOpaque, Metadata}
;
899 use bitflags
::bitflags
;
902 pub struct DIBuilder
<'a
>(InvariantOpaque
<'a
>);
904 pub type DIDescriptor
= Metadata
;
905 pub type DILocation
= Metadata
;
906 pub type DIScope
= DIDescriptor
;
907 pub type DIFile
= DIScope
;
908 pub type DILexicalBlock
= DIScope
;
909 pub type DISubprogram
= DIScope
;
910 pub type DINameSpace
= DIScope
;
911 pub type DIType
= DIDescriptor
;
912 pub type DIBasicType
= DIType
;
913 pub type DIDerivedType
= DIType
;
914 pub type DICompositeType
= DIDerivedType
;
915 pub type DIVariable
= DIDescriptor
;
916 pub type DIGlobalVariableExpression
= DIDescriptor
;
917 pub type DIArray
= DIDescriptor
;
918 pub type DISubrange
= DIDescriptor
;
919 pub type DIEnumerator
= DIDescriptor
;
920 pub type DITemplateTypeParameter
= DIDescriptor
;
922 // These values **must** match with LLVMRustDIFlags!!
926 pub struct DIFlags
: u32 {
928 const FlagPrivate
= 1;
929 const FlagProtected
= 2;
930 const FlagPublic
= 3;
931 const FlagFwdDecl
= (1 << 2);
932 const FlagAppleBlock
= (1 << 3);
933 const FlagBlockByrefStruct
= (1 << 4);
934 const FlagVirtual
= (1 << 5);
935 const FlagArtificial
= (1 << 6);
936 const FlagExplicit
= (1 << 7);
937 const FlagPrototyped
= (1 << 8);
938 const FlagObjcClassComplete
= (1 << 9);
939 const FlagObjectPointer
= (1 << 10);
940 const FlagVector
= (1 << 11);
941 const FlagStaticMember
= (1 << 12);
942 const FlagLValueReference
= (1 << 13);
943 const FlagRValueReference
= (1 << 14);
944 const FlagExternalTypeRef
= (1 << 15);
945 const FlagIntroducedVirtual
= (1 << 18);
946 const FlagBitField
= (1 << 19);
947 const FlagNoReturn
= (1 << 20);
951 // These values **must** match with LLVMRustDISPFlags!!
955 pub struct DISPFlags
: u32 {
956 const SPFlagZero
= 0;
957 const SPFlagVirtual
= 1;
958 const SPFlagPureVirtual
= 2;
959 const SPFlagLocalToUnit
= (1 << 2);
960 const SPFlagDefinition
= (1 << 3);
961 const SPFlagOptimized
= (1 << 4);
962 const SPFlagMainSubprogram
= (1 << 5);
966 /// LLVMRustDebugEmissionKind
967 #[derive(Copy, Clone)]
969 pub enum DebugEmissionKind
{
975 impl DebugEmissionKind
{
976 pub fn from_generic(kind
: rustc_session
::config
::DebugInfo
) -> Self {
977 use rustc_session
::config
::DebugInfo
;
979 DebugInfo
::None
=> DebugEmissionKind
::NoDebug
,
980 DebugInfo
::Limited
=> DebugEmissionKind
::LineTablesOnly
,
981 DebugInfo
::Full
=> DebugEmissionKind
::FullDebug
,
988 pub type ModuleBuffer
;
991 pub type SelfProfileBeforePassCallback
=
992 unsafe extern "C" fn(*mut c_void
, *const c_char
, *const c_char
);
993 pub type SelfProfileAfterPassCallback
= unsafe extern "C" fn(*mut c_void
);
996 pub fn LLVMRustInstallFatalErrorHandler();
997 pub fn LLVMRustDisableSystemDialogsOnCrash();
999 // Create and destroy contexts.
1000 pub fn LLVMRustContextCreate(shouldDiscardNames
: bool
) -> &'
static mut Context
;
1001 pub fn LLVMContextDispose(C
: &'
static mut Context
);
1002 pub fn LLVMGetMDKindIDInContext(C
: &Context
, Name
: *const c_char
, SLen
: c_uint
) -> c_uint
;
1005 pub fn LLVMModuleCreateWithNameInContext(ModuleID
: *const c_char
, C
: &Context
) -> &Module
;
1006 pub fn LLVMGetModuleContext(M
: &Module
) -> &Context
;
1007 pub fn LLVMCloneModule(M
: &Module
) -> &Module
;
1009 /// Data layout. See Module::getDataLayout.
1010 pub fn LLVMGetDataLayoutStr(M
: &Module
) -> *const c_char
;
1011 pub fn LLVMSetDataLayout(M
: &Module
, Triple
: *const c_char
);
1013 /// See Module::setModuleInlineAsm.
1014 pub fn LLVMSetModuleInlineAsm2(M
: &Module
, Asm
: *const c_char
, AsmLen
: size_t
);
1015 pub fn LLVMRustAppendModuleInlineAsm(M
: &Module
, Asm
: *const c_char
, AsmLen
: size_t
);
1017 /// See llvm::LLVMTypeKind::getTypeID.
1018 pub fn LLVMRustGetTypeKind(Ty
: &Type
) -> TypeKind
;
1020 // Operations on integer types
1021 pub fn LLVMInt1TypeInContext(C
: &Context
) -> &Type
;
1022 pub fn LLVMInt8TypeInContext(C
: &Context
) -> &Type
;
1023 pub fn LLVMInt16TypeInContext(C
: &Context
) -> &Type
;
1024 pub fn LLVMInt32TypeInContext(C
: &Context
) -> &Type
;
1025 pub fn LLVMInt64TypeInContext(C
: &Context
) -> &Type
;
1026 pub fn LLVMIntTypeInContext(C
: &Context
, NumBits
: c_uint
) -> &Type
;
1028 pub fn LLVMGetIntTypeWidth(IntegerTy
: &Type
) -> c_uint
;
1030 // Operations on real types
1031 pub fn LLVMFloatTypeInContext(C
: &Context
) -> &Type
;
1032 pub fn LLVMDoubleTypeInContext(C
: &Context
) -> &Type
;
1034 // Operations on function types
1035 pub fn LLVMFunctionType
<'a
>(
1036 ReturnType
: &'a Type
,
1037 ParamTypes
: *const &'a Type
,
1041 pub fn LLVMCountParamTypes(FunctionTy
: &Type
) -> c_uint
;
1042 pub fn LLVMGetParamTypes
<'a
>(FunctionTy
: &'a Type
, Dest
: *mut &'a Type
);
1044 // Operations on struct types
1045 pub fn LLVMStructTypeInContext
<'a
>(
1047 ElementTypes
: *const &'a Type
,
1048 ElementCount
: c_uint
,
1052 // Operations on array, pointer, and vector types (sequence types)
1053 pub fn LLVMRustArrayType(ElementType
: &Type
, ElementCount
: u64) -> &Type
;
1054 pub fn LLVMPointerType(ElementType
: &Type
, AddressSpace
: c_uint
) -> &Type
;
1055 pub fn LLVMVectorType(ElementType
: &Type
, ElementCount
: c_uint
) -> &Type
;
1057 pub fn LLVMGetElementType(Ty
: &Type
) -> &Type
;
1058 pub fn LLVMGetVectorSize(VectorTy
: &Type
) -> c_uint
;
1060 // Operations on other types
1061 pub fn LLVMVoidTypeInContext(C
: &Context
) -> &Type
;
1062 pub fn LLVMRustMetadataTypeInContext(C
: &Context
) -> &Type
;
1064 // Operations on all values
1065 pub fn LLVMTypeOf(Val
: &Value
) -> &Type
;
1066 pub fn LLVMGetValueName2(Val
: &Value
, Length
: *mut size_t
) -> *const c_char
;
1067 pub fn LLVMSetValueName2(Val
: &Value
, Name
: *const c_char
, NameLen
: size_t
);
1068 pub fn LLVMReplaceAllUsesWith
<'a
>(OldVal
: &'a Value
, NewVal
: &'a Value
);
1069 pub fn LLVMSetMetadata
<'a
>(Val
: &'a Value
, KindID
: c_uint
, Node
: &'a Value
);
1070 pub fn LLVMGlobalSetMetadata
<'a
>(Val
: &'a Value
, KindID
: c_uint
, Metadata
: &'a Metadata
);
1071 pub fn LLVMRustGlobalAddMetadata
<'a
>(Val
: &'a Value
, KindID
: c_uint
, Metadata
: &'a Metadata
);
1072 pub fn LLVMValueAsMetadata(Node
: &Value
) -> &Metadata
;
1074 // Operations on constants of any type
1075 pub fn LLVMConstNull(Ty
: &Type
) -> &Value
;
1076 pub fn LLVMGetUndef(Ty
: &Type
) -> &Value
;
1078 // Operations on metadata
1079 pub fn LLVMMDStringInContext(C
: &Context
, Str
: *const c_char
, SLen
: c_uint
) -> &Value
;
1080 pub fn LLVMMDNodeInContext
<'a
>(
1082 Vals
: *const &'a Value
,
1085 pub fn LLVMMDNodeInContext2
<'a
>(
1087 Vals
: *const &'a Metadata
,
1090 pub fn LLVMAddNamedMetadataOperand
<'a
>(M
: &'a Module
, Name
: *const c_char
, Val
: &'a Value
);
1092 // Operations on scalar constants
1093 pub fn LLVMConstInt(IntTy
: &Type
, N
: c_ulonglong
, SignExtend
: Bool
) -> &Value
;
1094 pub fn LLVMConstIntOfArbitraryPrecision(IntTy
: &Type
, Wn
: c_uint
, Ws
: *const u64) -> &Value
;
1095 pub fn LLVMConstReal(RealTy
: &Type
, N
: f64) -> &Value
;
1096 pub fn LLVMConstIntGetZExtValue(ConstantVal
: &ConstantInt
) -> c_ulonglong
;
1097 pub fn LLVMRustConstInt128Get(
1098 ConstantVal
: &ConstantInt
,
1104 // Operations on composite constants
1105 pub fn LLVMConstStringInContext(
1109 DontNullTerminate
: Bool
,
1111 pub fn LLVMConstStructInContext
<'a
>(
1113 ConstantVals
: *const &'a Value
,
1118 pub fn LLVMConstArray
<'a
>(
1119 ElementTy
: &'a Type
,
1120 ConstantVals
: *const &'a Value
,
1123 pub fn LLVMConstVector(ScalarConstantVals
: *const &Value
, Size
: c_uint
) -> &Value
;
1125 // Constant expressions
1126 pub fn LLVMRustConstInBoundsGEP2
<'a
>(
1128 ConstantVal
: &'a Value
,
1129 ConstantIndices
: *const &'a Value
,
1132 pub fn LLVMConstZExt
<'a
>(ConstantVal
: &'a Value
, ToType
: &'a Type
) -> &'a Value
;
1133 pub fn LLVMConstPtrToInt
<'a
>(ConstantVal
: &'a Value
, ToType
: &'a Type
) -> &'a Value
;
1134 pub fn LLVMConstIntToPtr
<'a
>(ConstantVal
: &'a Value
, ToType
: &'a Type
) -> &'a Value
;
1135 pub fn LLVMConstBitCast
<'a
>(ConstantVal
: &'a Value
, ToType
: &'a Type
) -> &'a Value
;
1136 pub fn LLVMConstPointerCast
<'a
>(ConstantVal
: &'a Value
, ToType
: &'a Type
) -> &'a Value
;
1137 pub fn LLVMConstExtractValue(
1138 AggConstant
: &Value
,
1139 IdxList
: *const c_uint
,
1143 // Operations on global variables, functions, and aliases (globals)
1144 pub fn LLVMIsDeclaration(Global
: &Value
) -> Bool
;
1145 pub fn LLVMRustGetLinkage(Global
: &Value
) -> Linkage
;
1146 pub fn LLVMRustSetLinkage(Global
: &Value
, RustLinkage
: Linkage
);
1147 pub fn LLVMSetSection(Global
: &Value
, Section
: *const c_char
);
1148 pub fn LLVMRustGetVisibility(Global
: &Value
) -> Visibility
;
1149 pub fn LLVMRustSetVisibility(Global
: &Value
, Viz
: Visibility
);
1150 pub fn LLVMRustSetDSOLocal(Global
: &Value
, is_dso_local
: bool
);
1151 pub fn LLVMGetAlignment(Global
: &Value
) -> c_uint
;
1152 pub fn LLVMSetAlignment(Global
: &Value
, Bytes
: c_uint
);
1153 pub fn LLVMSetDLLStorageClass(V
: &Value
, C
: DLLStorageClass
);
1155 // Operations on global variables
1156 pub fn LLVMIsAGlobalVariable(GlobalVar
: &Value
) -> Option
<&Value
>;
1157 pub fn LLVMAddGlobal
<'a
>(M
: &'a Module
, Ty
: &'a Type
, Name
: *const c_char
) -> &'a Value
;
1158 pub fn LLVMGetNamedGlobal(M
: &Module
, Name
: *const c_char
) -> Option
<&Value
>;
1159 pub fn LLVMRustGetOrInsertGlobal
<'a
>(
1161 Name
: *const c_char
,
1165 pub fn LLVMRustInsertPrivateGlobal
<'a
>(M
: &'a Module
, T
: &'a Type
) -> &'a Value
;
1166 pub fn LLVMGetFirstGlobal(M
: &Module
) -> Option
<&Value
>;
1167 pub fn LLVMGetNextGlobal(GlobalVar
: &Value
) -> Option
<&Value
>;
1168 pub fn LLVMDeleteGlobal(GlobalVar
: &Value
);
1169 pub fn LLVMGetInitializer(GlobalVar
: &Value
) -> Option
<&Value
>;
1170 pub fn LLVMSetInitializer
<'a
>(GlobalVar
: &'a Value
, ConstantVal
: &'a Value
);
1171 pub fn LLVMIsThreadLocal(GlobalVar
: &Value
) -> Bool
;
1172 pub fn LLVMSetThreadLocal(GlobalVar
: &Value
, IsThreadLocal
: Bool
);
1173 pub fn LLVMSetThreadLocalMode(GlobalVar
: &Value
, Mode
: ThreadLocalMode
);
1174 pub fn LLVMIsGlobalConstant(GlobalVar
: &Value
) -> Bool
;
1175 pub fn LLVMSetGlobalConstant(GlobalVar
: &Value
, IsConstant
: Bool
);
1176 pub fn LLVMRustGetNamedValue(
1178 Name
: *const c_char
,
1180 ) -> Option
<&Value
>;
1181 pub fn LLVMSetTailCall(CallInst
: &Value
, IsTailCall
: Bool
);
1183 // Operations on attributes
1184 pub fn LLVMRustCreateAttrNoValue(C
: &Context
, attr
: AttributeKind
) -> &Attribute
;
1185 pub fn LLVMCreateStringAttribute(
1187 Name
: *const c_char
,
1189 Value
: *const c_char
,
1192 pub fn LLVMRustCreateAlignmentAttr(C
: &Context
, bytes
: u64) -> &Attribute
;
1193 pub fn LLVMRustCreateDereferenceableAttr(C
: &Context
, bytes
: u64) -> &Attribute
;
1194 pub fn LLVMRustCreateDereferenceableOrNullAttr(C
: &Context
, bytes
: u64) -> &Attribute
;
1195 pub fn LLVMRustCreateByValAttr
<'a
>(C
: &'a Context
, ty
: &'a Type
) -> &'a Attribute
;
1196 pub fn LLVMRustCreateStructRetAttr
<'a
>(C
: &'a Context
, ty
: &'a Type
) -> &'a Attribute
;
1197 pub fn LLVMRustCreateUWTableAttr(C
: &Context
, async_
: bool
) -> &Attribute
;
1199 // Operations on functions
1200 pub fn LLVMRustGetOrInsertFunction
<'a
>(
1202 Name
: *const c_char
,
1204 FunctionTy
: &'a Type
,
1206 pub fn LLVMSetFunctionCallConv(Fn
: &Value
, CC
: c_uint
);
1207 pub fn LLVMRustAddFunctionAttributes
<'a
>(
1210 Attrs
: *const &'a Attribute
,
1214 // Operations on parameters
1215 pub fn LLVMIsAArgument(Val
: &Value
) -> Option
<&Value
>;
1216 pub fn LLVMCountParams(Fn
: &Value
) -> c_uint
;
1217 pub fn LLVMGetParam(Fn
: &Value
, Index
: c_uint
) -> &Value
;
1219 // Operations on basic blocks
1220 pub fn LLVMGetBasicBlockParent(BB
: &BasicBlock
) -> &Value
;
1221 pub fn LLVMAppendBasicBlockInContext
<'a
>(
1224 Name
: *const c_char
,
1225 ) -> &'a BasicBlock
;
1227 // Operations on instructions
1228 pub fn LLVMIsAInstruction(Val
: &Value
) -> Option
<&Value
>;
1229 pub fn LLVMGetFirstBasicBlock(Fn
: &Value
) -> &BasicBlock
;
1231 // Operations on call sites
1232 pub fn LLVMSetInstructionCallConv(Instr
: &Value
, CC
: c_uint
);
1233 pub fn LLVMRustAddCallSiteAttributes
<'a
>(
1236 Attrs
: *const &'a Attribute
,
1240 // Operations on load/store instructions (only)
1241 pub fn LLVMSetVolatile(MemoryAccessInst
: &Value
, volatile
: Bool
);
1243 // Operations on phi nodes
1244 pub fn LLVMAddIncoming
<'a
>(
1246 IncomingValues
: *const &'a Value
,
1247 IncomingBlocks
: *const &'a BasicBlock
,
1251 // Instruction builders
1252 pub fn LLVMCreateBuilderInContext(C
: &Context
) -> &mut Builder
<'_
>;
1253 pub fn LLVMPositionBuilderAtEnd
<'a
>(Builder
: &Builder
<'a
>, Block
: &'a BasicBlock
);
1254 pub fn LLVMGetInsertBlock
<'a
>(Builder
: &Builder
<'a
>) -> &'a BasicBlock
;
1255 pub fn LLVMDisposeBuilder
<'a
>(Builder
: &'a
mut Builder
<'a
>);
1258 pub fn LLVMSetCurrentDebugLocation
<'a
>(Builder
: &Builder
<'a
>, L
: &'a Value
);
1261 pub fn LLVMBuildRetVoid
<'a
>(B
: &Builder
<'a
>) -> &'a Value
;
1262 pub fn LLVMBuildRet
<'a
>(B
: &Builder
<'a
>, V
: &'a Value
) -> &'a Value
;
1263 pub fn LLVMBuildBr
<'a
>(B
: &Builder
<'a
>, Dest
: &'a BasicBlock
) -> &'a Value
;
1264 pub fn LLVMBuildCondBr
<'a
>(
1267 Then
: &'a BasicBlock
,
1268 Else
: &'a BasicBlock
,
1270 pub fn LLVMBuildSwitch
<'a
>(
1273 Else
: &'a BasicBlock
,
1276 pub fn LLVMRustBuildInvoke
<'a
>(
1280 Args
: *const &'a Value
,
1282 Then
: &'a BasicBlock
,
1283 Catch
: &'a BasicBlock
,
1284 Bundle
: Option
<&OperandBundleDef
<'a
>>,
1285 Name
: *const c_char
,
1287 pub fn LLVMBuildLandingPad
<'a
>(
1290 PersFn
: Option
<&'a Value
>,
1292 Name
: *const c_char
,
1294 pub fn LLVMBuildResume
<'a
>(B
: &Builder
<'a
>, Exn
: &'a Value
) -> &'a Value
;
1295 pub fn LLVMBuildUnreachable
<'a
>(B
: &Builder
<'a
>) -> &'a Value
;
1297 pub fn LLVMRustBuildCleanupPad
<'a
>(
1299 ParentPad
: Option
<&'a Value
>,
1301 Args
: *const &'a Value
,
1302 Name
: *const c_char
,
1303 ) -> Option
<&'a Value
>;
1304 pub fn LLVMRustBuildCleanupRet
<'a
>(
1306 CleanupPad
: &'a Value
,
1307 UnwindBB
: Option
<&'a BasicBlock
>,
1308 ) -> Option
<&'a Value
>;
1309 pub fn LLVMRustBuildCatchPad
<'a
>(
1311 ParentPad
: &'a Value
,
1313 Args
: *const &'a Value
,
1314 Name
: *const c_char
,
1315 ) -> Option
<&'a Value
>;
1316 pub fn LLVMRustBuildCatchRet
<'a
>(
1320 ) -> Option
<&'a Value
>;
1321 pub fn LLVMRustBuildCatchSwitch
<'a
>(
1322 Builder
: &Builder
<'a
>,
1323 ParentPad
: Option
<&'a Value
>,
1324 BB
: Option
<&'a BasicBlock
>,
1325 NumHandlers
: c_uint
,
1326 Name
: *const c_char
,
1327 ) -> Option
<&'a Value
>;
1328 pub fn LLVMRustAddHandler
<'a
>(CatchSwitch
: &'a Value
, Handler
: &'a BasicBlock
);
1329 pub fn LLVMSetPersonalityFn
<'a
>(Func
: &'a Value
, Pers
: &'a Value
);
1331 // Add a case to the switch instruction
1332 pub fn LLVMAddCase
<'a
>(Switch
: &'a Value
, OnVal
: &'a Value
, Dest
: &'a BasicBlock
);
1334 // Add a clause to the landing pad instruction
1335 pub fn LLVMAddClause
<'a
>(LandingPad
: &'a Value
, ClauseVal
: &'a Value
);
1337 // Set the cleanup on a landing pad instruction
1338 pub fn LLVMSetCleanup(LandingPad
: &Value
, Val
: Bool
);
1341 pub fn LLVMBuildAdd
<'a
>(
1345 Name
: *const c_char
,
1347 pub fn LLVMBuildFAdd
<'a
>(
1351 Name
: *const c_char
,
1353 pub fn LLVMBuildSub
<'a
>(
1357 Name
: *const c_char
,
1359 pub fn LLVMBuildFSub
<'a
>(
1363 Name
: *const c_char
,
1365 pub fn LLVMBuildMul
<'a
>(
1369 Name
: *const c_char
,
1371 pub fn LLVMBuildFMul
<'a
>(
1375 Name
: *const c_char
,
1377 pub fn LLVMBuildUDiv
<'a
>(
1381 Name
: *const c_char
,
1383 pub fn LLVMBuildExactUDiv
<'a
>(
1387 Name
: *const c_char
,
1389 pub fn LLVMBuildSDiv
<'a
>(
1393 Name
: *const c_char
,
1395 pub fn LLVMBuildExactSDiv
<'a
>(
1399 Name
: *const c_char
,
1401 pub fn LLVMBuildFDiv
<'a
>(
1405 Name
: *const c_char
,
1407 pub fn LLVMBuildURem
<'a
>(
1411 Name
: *const c_char
,
1413 pub fn LLVMBuildSRem
<'a
>(
1417 Name
: *const c_char
,
1419 pub fn LLVMBuildFRem
<'a
>(
1423 Name
: *const c_char
,
1425 pub fn LLVMBuildShl
<'a
>(
1429 Name
: *const c_char
,
1431 pub fn LLVMBuildLShr
<'a
>(
1435 Name
: *const c_char
,
1437 pub fn LLVMBuildAShr
<'a
>(
1441 Name
: *const c_char
,
1443 pub fn LLVMBuildNSWAdd
<'a
>(
1447 Name
: *const c_char
,
1449 pub fn LLVMBuildNUWAdd
<'a
>(
1453 Name
: *const c_char
,
1455 pub fn LLVMBuildNSWSub
<'a
>(
1459 Name
: *const c_char
,
1461 pub fn LLVMBuildNUWSub
<'a
>(
1465 Name
: *const c_char
,
1467 pub fn LLVMBuildNSWMul
<'a
>(
1471 Name
: *const c_char
,
1473 pub fn LLVMBuildNUWMul
<'a
>(
1477 Name
: *const c_char
,
1479 pub fn LLVMBuildAnd
<'a
>(
1483 Name
: *const c_char
,
1485 pub fn LLVMBuildOr
<'a
>(
1489 Name
: *const c_char
,
1491 pub fn LLVMBuildXor
<'a
>(
1495 Name
: *const c_char
,
1497 pub fn LLVMBuildNeg
<'a
>(B
: &Builder
<'a
>, V
: &'a Value
, Name
: *const c_char
) -> &'a Value
;
1498 pub fn LLVMBuildFNeg
<'a
>(B
: &Builder
<'a
>, V
: &'a Value
, Name
: *const c_char
) -> &'a Value
;
1499 pub fn LLVMBuildNot
<'a
>(B
: &Builder
<'a
>, V
: &'a Value
, Name
: *const c_char
) -> &'a Value
;
1500 pub fn LLVMRustSetFastMath(Instr
: &Value
);
1503 pub fn LLVMBuildAlloca
<'a
>(B
: &Builder
<'a
>, Ty
: &'a Type
, Name
: *const c_char
) -> &'a Value
;
1504 pub fn LLVMBuildArrayAlloca
<'a
>(
1508 Name
: *const c_char
,
1510 pub fn LLVMBuildLoad2
<'a
>(
1513 PointerVal
: &'a Value
,
1514 Name
: *const c_char
,
1517 pub fn LLVMBuildStore
<'a
>(B
: &Builder
<'a
>, Val
: &'a Value
, Ptr
: &'a Value
) -> &'a Value
;
1519 pub fn LLVMBuildGEP2
<'a
>(
1523 Indices
: *const &'a Value
,
1525 Name
: *const c_char
,
1527 pub fn LLVMBuildInBoundsGEP2
<'a
>(
1531 Indices
: *const &'a Value
,
1533 Name
: *const c_char
,
1535 pub fn LLVMBuildStructGEP2
<'a
>(
1540 Name
: *const c_char
,
1544 pub fn LLVMBuildTrunc
<'a
>(
1548 Name
: *const c_char
,
1550 pub fn LLVMBuildZExt
<'a
>(
1554 Name
: *const c_char
,
1556 pub fn LLVMBuildSExt
<'a
>(
1560 Name
: *const c_char
,
1562 pub fn LLVMBuildFPToUI
<'a
>(
1566 Name
: *const c_char
,
1568 pub fn LLVMBuildFPToSI
<'a
>(
1572 Name
: *const c_char
,
1574 pub fn LLVMBuildUIToFP
<'a
>(
1578 Name
: *const c_char
,
1580 pub fn LLVMBuildSIToFP
<'a
>(
1584 Name
: *const c_char
,
1586 pub fn LLVMBuildFPTrunc
<'a
>(
1590 Name
: *const c_char
,
1592 pub fn LLVMBuildFPExt
<'a
>(
1596 Name
: *const c_char
,
1598 pub fn LLVMBuildPtrToInt
<'a
>(
1602 Name
: *const c_char
,
1604 pub fn LLVMBuildIntToPtr
<'a
>(
1608 Name
: *const c_char
,
1610 pub fn LLVMBuildBitCast
<'a
>(
1614 Name
: *const c_char
,
1616 pub fn LLVMBuildPointerCast
<'a
>(
1620 Name
: *const c_char
,
1622 pub fn LLVMRustBuildIntCast
<'a
>(
1630 pub fn LLVMBuildICmp
<'a
>(
1635 Name
: *const c_char
,
1637 pub fn LLVMBuildFCmp
<'a
>(
1642 Name
: *const c_char
,
1645 // Miscellaneous instructions
1646 pub fn LLVMBuildPhi
<'a
>(B
: &Builder
<'a
>, Ty
: &'a Type
, Name
: *const c_char
) -> &'a Value
;
1647 pub fn LLVMRustGetInstrProfIncrementIntrinsic(M
: &Module
) -> &Value
;
1648 pub fn LLVMRustBuildCall
<'a
>(
1652 Args
: *const &'a Value
,
1654 Bundle
: Option
<&OperandBundleDef
<'a
>>,
1656 pub fn LLVMRustBuildMemCpy
<'a
>(
1665 pub fn LLVMRustBuildMemMove
<'a
>(
1674 pub fn LLVMRustBuildMemSet
<'a
>(
1682 pub fn LLVMBuildSelect
<'a
>(
1687 Name
: *const c_char
,
1689 pub fn LLVMBuildVAArg
<'a
>(
1693 Name
: *const c_char
,
1695 pub fn LLVMBuildExtractElement
<'a
>(
1699 Name
: *const c_char
,
1701 pub fn LLVMBuildInsertElement
<'a
>(
1706 Name
: *const c_char
,
1708 pub fn LLVMBuildShuffleVector
<'a
>(
1713 Name
: *const c_char
,
1715 pub fn LLVMBuildExtractValue
<'a
>(
1719 Name
: *const c_char
,
1721 pub fn LLVMBuildInsertValue
<'a
>(
1726 Name
: *const c_char
,
1729 pub fn LLVMRustBuildVectorReduceFAdd
<'a
>(
1734 pub fn LLVMRustBuildVectorReduceFMul
<'a
>(
1739 pub fn LLVMRustBuildVectorReduceAdd
<'a
>(B
: &Builder
<'a
>, Src
: &'a Value
) -> &'a Value
;
1740 pub fn LLVMRustBuildVectorReduceMul
<'a
>(B
: &Builder
<'a
>, Src
: &'a Value
) -> &'a Value
;
1741 pub fn LLVMRustBuildVectorReduceAnd
<'a
>(B
: &Builder
<'a
>, Src
: &'a Value
) -> &'a Value
;
1742 pub fn LLVMRustBuildVectorReduceOr
<'a
>(B
: &Builder
<'a
>, Src
: &'a Value
) -> &'a Value
;
1743 pub fn LLVMRustBuildVectorReduceXor
<'a
>(B
: &Builder
<'a
>, Src
: &'a Value
) -> &'a Value
;
1744 pub fn LLVMRustBuildVectorReduceMin
<'a
>(
1749 pub fn LLVMRustBuildVectorReduceMax
<'a
>(
1754 pub fn LLVMRustBuildVectorReduceFMin
<'a
>(
1759 pub fn LLVMRustBuildVectorReduceFMax
<'a
>(
1765 pub fn LLVMRustBuildMinNum
<'a
>(B
: &Builder
<'a
>, LHS
: &'a Value
, LHS
: &'a Value
) -> &'a Value
;
1766 pub fn LLVMRustBuildMaxNum
<'a
>(B
: &Builder
<'a
>, LHS
: &'a Value
, LHS
: &'a Value
) -> &'a Value
;
1768 // Atomic Operations
1769 pub fn LLVMRustBuildAtomicLoad
<'a
>(
1771 ElementType
: &'a Type
,
1772 PointerVal
: &'a Value
,
1773 Name
: *const c_char
,
1774 Order
: AtomicOrdering
,
1777 pub fn LLVMRustBuildAtomicStore
<'a
>(
1781 Order
: AtomicOrdering
,
1784 pub fn LLVMRustBuildAtomicCmpXchg
<'a
>(
1789 Order
: AtomicOrdering
,
1790 FailureOrder
: AtomicOrdering
,
1794 pub fn LLVMBuildAtomicRMW
<'a
>(
1799 Order
: AtomicOrdering
,
1800 SingleThreaded
: Bool
,
1803 pub fn LLVMRustBuildAtomicFence(
1805 Order
: AtomicOrdering
,
1806 Scope
: SynchronizationScope
,
1809 /// Writes a module to the specified path. Returns 0 on success.
1810 pub fn LLVMWriteBitcodeToFile(M
: &Module
, Path
: *const c_char
) -> c_int
;
1812 /// Creates a pass manager.
1813 pub fn LLVMCreatePassManager
<'a
>() -> &'a
mut PassManager
<'a
>;
1815 /// Creates a function-by-function pass manager
1816 pub fn LLVMCreateFunctionPassManagerForModule(M
: &Module
) -> &mut PassManager
<'_
>;
1818 /// Disposes a pass manager.
1819 pub fn LLVMDisposePassManager
<'a
>(PM
: &'a
mut PassManager
<'a
>);
1821 /// Runs a pass manager on a module.
1822 pub fn LLVMRunPassManager
<'a
>(PM
: &PassManager
<'a
>, M
: &'a Module
) -> Bool
;
1824 pub fn LLVMInitializePasses();
1826 pub fn LLVMTimeTraceProfilerInitialize();
1828 pub fn LLVMTimeTraceProfilerFinishThread();
1830 pub fn LLVMTimeTraceProfilerFinish(FileName
: *const c_char
);
1832 pub fn LLVMAddAnalysisPasses
<'a
>(T
: &'a TargetMachine
, PM
: &PassManager
<'a
>);
1834 pub fn LLVMRustPassManagerBuilderCreate() -> &'
static mut PassManagerBuilder
;
1835 pub fn LLVMRustPassManagerBuilderDispose(PMB
: &'
static mut PassManagerBuilder
);
1836 pub fn LLVMRustPassManagerBuilderUseInlinerWithThreshold(
1837 PMB
: &PassManagerBuilder
,
1840 pub fn LLVMRustPassManagerBuilderPopulateModulePassManager(
1841 PMB
: &PassManagerBuilder
,
1842 PM
: &PassManager
<'_
>,
1845 pub fn LLVMRustPassManagerBuilderPopulateFunctionPassManager(
1846 PMB
: &PassManagerBuilder
,
1847 PM
: &PassManager
<'_
>,
1849 pub fn LLVMRustPassManagerBuilderPopulateLTOPassManager(
1850 PMB
: &PassManagerBuilder
,
1851 PM
: &PassManager
<'_
>,
1855 pub fn LLVMRustPassManagerBuilderPopulateThinLTOPassManager(
1856 PMB
: &PassManagerBuilder
,
1857 PM
: &PassManager
<'_
>,
1860 pub fn LLVMGetHostCPUFeatures() -> *mut c_char
;
1862 pub fn LLVMDisposeMessage(message
: *mut c_char
);
1864 pub fn LLVMIsMultithreaded() -> Bool
;
1866 /// Returns a string describing the last error caused by an LLVMRust* call.
1867 pub fn LLVMRustGetLastError() -> *const c_char
;
1869 /// Print the pass timings since static dtors aren't picking them up.
1870 pub fn LLVMRustPrintPassTimings();
1872 pub fn LLVMStructCreateNamed(C
: &Context
, Name
: *const c_char
) -> &Type
;
1874 pub fn LLVMStructSetBody
<'a
>(
1876 ElementTypes
: *const &'a Type
,
1877 ElementCount
: c_uint
,
1881 /// Prepares inline assembly.
1882 pub fn LLVMRustInlineAsm(
1884 AsmString
: *const c_char
,
1885 AsmStringLen
: size_t
,
1886 Constraints
: *const c_char
,
1887 ConstraintsLen
: size_t
,
1890 Dialect
: AsmDialect
,
1893 pub fn LLVMRustInlineAsmVerify(
1895 Constraints
: *const c_char
,
1896 ConstraintsLen
: size_t
,
1899 #[allow(improper_ctypes)]
1900 pub fn LLVMRustCoverageWriteFilenamesSectionToBuffer(
1901 Filenames
: *const *const c_char
,
1902 FilenamesLen
: size_t
,
1903 BufferOut
: &RustString
,
1906 #[allow(improper_ctypes)]
1907 pub fn LLVMRustCoverageWriteMappingToBuffer(
1908 VirtualFileMappingIDs
: *const c_uint
,
1909 NumVirtualFileMappingIDs
: c_uint
,
1910 Expressions
: *const coverage_map
::CounterExpression
,
1911 NumExpressions
: c_uint
,
1912 MappingRegions
: *const coverageinfo
::CounterMappingRegion
,
1913 NumMappingRegions
: c_uint
,
1914 BufferOut
: &RustString
,
1917 pub fn LLVMRustCoverageCreatePGOFuncNameVar(F
: &Value
, FuncName
: *const c_char
) -> &Value
;
1918 pub fn LLVMRustCoverageHashCString(StrVal
: *const c_char
) -> u64;
1919 pub fn LLVMRustCoverageHashByteArray(Bytes
: *const c_char
, NumBytes
: size_t
) -> u64;
1921 #[allow(improper_ctypes)]
1922 pub fn LLVMRustCoverageWriteMapSectionNameToString(M
: &Module
, Str
: &RustString
);
1924 #[allow(improper_ctypes)]
1925 pub fn LLVMRustCoverageWriteFuncSectionNameToString(M
: &Module
, Str
: &RustString
);
1927 #[allow(improper_ctypes)]
1928 pub fn LLVMRustCoverageWriteMappingVarNameToString(Str
: &RustString
);
1930 pub fn LLVMRustCoverageMappingVersion() -> u32;
1931 pub fn LLVMRustDebugMetadataVersion() -> u32;
1932 pub fn LLVMRustVersionMajor() -> u32;
1933 pub fn LLVMRustVersionMinor() -> u32;
1934 pub fn LLVMRustVersionPatch() -> u32;
1936 /// Add LLVM module flags.
1938 /// In order for Rust-C LTO to work, module flags must be compatible with Clang. What
1939 /// "compatible" means depends on the merge behaviors involved.
1940 pub fn LLVMRustAddModuleFlag(
1942 merge_behavior
: LLVMModFlagBehavior
,
1943 name
: *const c_char
,
1946 pub fn LLVMRustHasModuleFlag(M
: &Module
, name
: *const c_char
, len
: size_t
) -> bool
;
1948 pub fn LLVMRustMetadataAsValue
<'a
>(C
: &'a Context
, MD
: &'a Metadata
) -> &'a Value
;
1950 pub fn LLVMRustDIBuilderCreate(M
: &Module
) -> &mut DIBuilder
<'_
>;
1952 pub fn LLVMRustDIBuilderDispose
<'a
>(Builder
: &'a
mut DIBuilder
<'a
>);
1954 pub fn LLVMRustDIBuilderFinalize(Builder
: &DIBuilder
<'_
>);
1956 pub fn LLVMRustDIBuilderCreateCompileUnit
<'a
>(
1957 Builder
: &DIBuilder
<'a
>,
1960 Producer
: *const c_char
,
1961 ProducerLen
: size_t
,
1963 Flags
: *const c_char
,
1965 SplitName
: *const c_char
,
1966 SplitNameLen
: size_t
,
1967 kind
: DebugEmissionKind
,
1969 SplitDebugInlining
: bool
,
1970 ) -> &'a DIDescriptor
;
1972 pub fn LLVMRustDIBuilderCreateFile
<'a
>(
1973 Builder
: &DIBuilder
<'a
>,
1974 Filename
: *const c_char
,
1975 FilenameLen
: size_t
,
1976 Directory
: *const c_char
,
1977 DirectoryLen
: size_t
,
1978 CSKind
: ChecksumKind
,
1979 Checksum
: *const c_char
,
1980 ChecksumLen
: size_t
,
1983 pub fn LLVMRustDIBuilderCreateSubroutineType
<'a
>(
1984 Builder
: &DIBuilder
<'a
>,
1985 ParameterTypes
: &'a DIArray
,
1986 ) -> &'a DICompositeType
;
1988 pub fn LLVMRustDIBuilderCreateFunction
<'a
>(
1989 Builder
: &DIBuilder
<'a
>,
1990 Scope
: &'a DIDescriptor
,
1991 Name
: *const c_char
,
1993 LinkageName
: *const c_char
,
1994 LinkageNameLen
: size_t
,
2001 MaybeFn
: Option
<&'a Value
>,
2002 TParam
: &'a DIArray
,
2003 Decl
: Option
<&'a DIDescriptor
>,
2004 ) -> &'a DISubprogram
;
2006 pub fn LLVMRustDIBuilderCreateBasicType
<'a
>(
2007 Builder
: &DIBuilder
<'a
>,
2008 Name
: *const c_char
,
2012 ) -> &'a DIBasicType
;
2014 pub fn LLVMRustDIBuilderCreateTypedef
<'a
>(
2015 Builder
: &DIBuilder
<'a
>,
2016 Type
: &'a DIBasicType
,
2017 Name
: *const c_char
,
2021 Scope
: Option
<&'a DIScope
>,
2022 ) -> &'a DIDerivedType
;
2024 pub fn LLVMRustDIBuilderCreatePointerType
<'a
>(
2025 Builder
: &DIBuilder
<'a
>,
2026 PointeeTy
: &'a DIType
,
2029 AddressSpace
: c_uint
,
2030 Name
: *const c_char
,
2032 ) -> &'a DIDerivedType
;
2034 pub fn LLVMRustDIBuilderCreateStructType
<'a
>(
2035 Builder
: &DIBuilder
<'a
>,
2036 Scope
: Option
<&'a DIDescriptor
>,
2037 Name
: *const c_char
,
2044 DerivedFrom
: Option
<&'a DIType
>,
2045 Elements
: &'a DIArray
,
2046 RunTimeLang
: c_uint
,
2047 VTableHolder
: Option
<&'a DIType
>,
2048 UniqueId
: *const c_char
,
2049 UniqueIdLen
: size_t
,
2050 ) -> &'a DICompositeType
;
2052 pub fn LLVMRustDIBuilderCreateMemberType
<'a
>(
2053 Builder
: &DIBuilder
<'a
>,
2054 Scope
: &'a DIDescriptor
,
2055 Name
: *const c_char
,
2064 ) -> &'a DIDerivedType
;
2066 pub fn LLVMRustDIBuilderCreateVariantMemberType
<'a
>(
2067 Builder
: &DIBuilder
<'a
>,
2069 Name
: *const c_char
,
2076 Discriminant
: Option
<&'a Value
>,
2081 pub fn LLVMRustDIBuilderCreateLexicalBlock
<'a
>(
2082 Builder
: &DIBuilder
<'a
>,
2087 ) -> &'a DILexicalBlock
;
2089 pub fn LLVMRustDIBuilderCreateLexicalBlockFile
<'a
>(
2090 Builder
: &DIBuilder
<'a
>,
2093 ) -> &'a DILexicalBlock
;
2095 pub fn LLVMRustDIBuilderCreateStaticVariable
<'a
>(
2096 Builder
: &DIBuilder
<'a
>,
2097 Context
: Option
<&'a DIScope
>,
2098 Name
: *const c_char
,
2100 LinkageName
: *const c_char
,
2101 LinkageNameLen
: size_t
,
2105 isLocalToUnit
: bool
,
2107 Decl
: Option
<&'a DIDescriptor
>,
2109 ) -> &'a DIGlobalVariableExpression
;
2111 pub fn LLVMRustDIBuilderCreateVariable
<'a
>(
2112 Builder
: &DIBuilder
<'a
>,
2114 Scope
: &'a DIDescriptor
,
2115 Name
: *const c_char
,
2120 AlwaysPreserve
: bool
,
2124 ) -> &'a DIVariable
;
2126 pub fn LLVMRustDIBuilderCreateArrayType
<'a
>(
2127 Builder
: &DIBuilder
<'a
>,
2131 Subscripts
: &'a DIArray
,
2134 pub fn LLVMRustDIBuilderGetOrCreateSubrange
<'a
>(
2135 Builder
: &DIBuilder
<'a
>,
2138 ) -> &'a DISubrange
;
2140 pub fn LLVMRustDIBuilderGetOrCreateArray
<'a
>(
2141 Builder
: &DIBuilder
<'a
>,
2142 Ptr
: *const Option
<&'a DIDescriptor
>,
2146 pub fn LLVMRustDIBuilderInsertDeclareAtEnd
<'a
>(
2147 Builder
: &DIBuilder
<'a
>,
2149 VarInfo
: &'a DIVariable
,
2150 AddrOps
: *const u64,
2151 AddrOpsCount
: c_uint
,
2153 InsertAtEnd
: &'a BasicBlock
,
2156 pub fn LLVMRustDIBuilderCreateEnumerator
<'a
>(
2157 Builder
: &DIBuilder
<'a
>,
2158 Name
: *const c_char
,
2162 ) -> &'a DIEnumerator
;
2164 pub fn LLVMRustDIBuilderCreateEnumerationType
<'a
>(
2165 Builder
: &DIBuilder
<'a
>,
2167 Name
: *const c_char
,
2173 Elements
: &'a DIArray
,
2174 ClassType
: &'a DIType
,
2178 pub fn LLVMRustDIBuilderCreateUnionType
<'a
>(
2179 Builder
: &DIBuilder
<'a
>,
2180 Scope
: Option
<&'a DIScope
>,
2181 Name
: *const c_char
,
2188 Elements
: Option
<&'a DIArray
>,
2189 RunTimeLang
: c_uint
,
2190 UniqueId
: *const c_char
,
2191 UniqueIdLen
: size_t
,
2194 pub fn LLVMRustDIBuilderCreateVariantPart
<'a
>(
2195 Builder
: &DIBuilder
<'a
>,
2197 Name
: *const c_char
,
2204 Discriminator
: Option
<&'a DIDerivedType
>,
2205 Elements
: &'a DIArray
,
2206 UniqueId
: *const c_char
,
2207 UniqueIdLen
: size_t
,
2208 ) -> &'a DIDerivedType
;
2210 pub fn LLVMSetUnnamedAddress(Global
: &Value
, UnnamedAddr
: UnnamedAddr
);
2212 pub fn LLVMRustDIBuilderCreateTemplateTypeParameter
<'a
>(
2213 Builder
: &DIBuilder
<'a
>,
2214 Scope
: Option
<&'a DIScope
>,
2215 Name
: *const c_char
,
2218 ) -> &'a DITemplateTypeParameter
;
2220 pub fn LLVMRustDIBuilderCreateNameSpace
<'a
>(
2221 Builder
: &DIBuilder
<'a
>,
2222 Scope
: Option
<&'a DIScope
>,
2223 Name
: *const c_char
,
2225 ExportSymbols
: bool
,
2226 ) -> &'a DINameSpace
;
2228 pub fn LLVMRustDICompositeTypeReplaceArrays
<'a
>(
2229 Builder
: &DIBuilder
<'a
>,
2230 CompositeType
: &'a DIType
,
2231 Elements
: Option
<&'a DIArray
>,
2232 Params
: Option
<&'a DIArray
>,
2235 pub fn LLVMRustDIBuilderCreateDebugLocation
<'a
>(
2239 InlinedAt
: Option
<&'a DILocation
>,
2240 ) -> &'a DILocation
;
2241 pub fn LLVMRustDIBuilderCreateOpDeref() -> u64;
2242 pub fn LLVMRustDIBuilderCreateOpPlusUconst() -> u64;
2244 #[allow(improper_ctypes)]
2245 pub fn LLVMRustWriteTypeToString(Type
: &Type
, s
: &RustString
);
2246 #[allow(improper_ctypes)]
2247 pub fn LLVMRustWriteValueToString(value_ref
: &Value
, s
: &RustString
);
2249 pub fn LLVMIsAConstantInt(value_ref
: &Value
) -> Option
<&ConstantInt
>;
2251 pub fn LLVMRustPassKind(Pass
: &Pass
) -> PassKind
;
2252 pub fn LLVMRustFindAndCreatePass(Pass
: *const c_char
) -> Option
<&'
static mut Pass
>;
2253 pub fn LLVMRustCreateAddressSanitizerFunctionPass(Recover
: bool
) -> &'
static mut Pass
;
2254 pub fn LLVMRustCreateModuleAddressSanitizerPass(Recover
: bool
) -> &'
static mut Pass
;
2255 pub fn LLVMRustCreateMemorySanitizerPass(
2256 TrackOrigins
: c_int
,
2258 ) -> &'
static mut Pass
;
2259 pub fn LLVMRustCreateThreadSanitizerPass() -> &'
static mut Pass
;
2260 pub fn LLVMRustCreateHWAddressSanitizerPass(Recover
: bool
) -> &'
static mut Pass
;
2261 pub fn LLVMRustAddPass(PM
: &PassManager
<'_
>, Pass
: &'
static mut Pass
);
2262 pub fn LLVMRustAddLastExtensionPasses(
2263 PMB
: &PassManagerBuilder
,
2264 Passes
: *const &'
static mut Pass
,
2268 pub fn LLVMRustHasFeature(T
: &TargetMachine
, s
: *const c_char
) -> bool
;
2270 pub fn LLVMRustPrintTargetCPUs(T
: &TargetMachine
);
2271 pub fn LLVMRustGetTargetFeaturesCount(T
: &TargetMachine
) -> size_t
;
2272 pub fn LLVMRustGetTargetFeature(
2275 Feature
: &mut *const c_char
,
2276 Desc
: &mut *const c_char
,
2279 pub fn LLVMRustGetHostCPUName(len
: *mut usize) -> *const c_char
;
2280 pub fn LLVMRustCreateTargetMachine(
2281 Triple
: *const c_char
,
2283 Features
: *const c_char
,
2287 Level
: CodeGenOptLevel
,
2289 FunctionSections
: bool
,
2291 UniqueSectionNames
: bool
,
2292 TrapUnreachable
: bool
,
2295 EmitStackSizeSection
: bool
,
2296 RelaxELFRelocations
: bool
,
2298 SplitDwarfFile
: *const c_char
,
2299 ) -> Option
<&'
static mut TargetMachine
>;
2300 pub fn LLVMRustDisposeTargetMachine(T
: &'
static mut TargetMachine
);
2301 pub fn LLVMRustAddBuilderLibraryInfo
<'a
>(
2302 PMB
: &'a PassManagerBuilder
,
2304 DisableSimplifyLibCalls
: bool
,
2306 pub fn LLVMRustConfigurePassManagerBuilder(
2307 PMB
: &PassManagerBuilder
,
2308 OptLevel
: CodeGenOptLevel
,
2309 MergeFunctions
: bool
,
2311 LoopVectorize
: bool
,
2312 PrepareForThinLTO
: bool
,
2313 PGOGenPath
: *const c_char
,
2314 PGOUsePath
: *const c_char
,
2315 PGOSampleUsePath
: *const c_char
,
2318 pub fn LLVMRustAddLibraryInfo
<'a
>(
2319 PM
: &PassManager
<'a
>,
2321 DisableSimplifyLibCalls
: bool
,
2323 pub fn LLVMRustRunFunctionPassManager
<'a
>(PM
: &PassManager
<'a
>, M
: &'a Module
);
2324 pub fn LLVMRustWriteOutputFile
<'a
>(
2325 T
: &'a TargetMachine
,
2326 PM
: &PassManager
<'a
>,
2328 Output
: *const c_char
,
2329 DwoOutput
: *const c_char
,
2331 ) -> LLVMRustResult
;
2332 pub fn LLVMRustOptimizeWithNewPassManager
<'a
>(
2334 TM
: &'a TargetMachine
,
2335 OptLevel
: PassBuilderOptLevel
,
2337 NoPrepopulatePasses
: bool
,
2339 UseThinLTOBuffers
: bool
,
2340 MergeFunctions
: bool
,
2343 LoopVectorize
: bool
,
2344 DisableSimplifyLibCalls
: bool
,
2345 EmitLifetimeMarkers
: bool
,
2346 SanitizerOptions
: Option
<&SanitizerOptions
>,
2347 PGOGenPath
: *const c_char
,
2348 PGOUsePath
: *const c_char
,
2349 InstrumentCoverage
: bool
,
2350 InstrumentGCOV
: bool
,
2351 PGOSampleUsePath
: *const c_char
,
2352 DebugInfoForProfiling
: bool
,
2353 llvm_selfprofiler
: *mut c_void
,
2354 begin_callback
: SelfProfileBeforePassCallback
,
2355 end_callback
: SelfProfileAfterPassCallback
,
2356 ExtraPasses
: *const c_char
,
2357 ExtraPassesLen
: size_t
,
2358 LLVMPlugins
: *const c_char
,
2359 LLVMPluginsLen
: size_t
,
2360 ) -> LLVMRustResult
;
2361 pub fn LLVMRustPrintModule(
2363 Output
: *const c_char
,
2364 Demangle
: extern "C" fn(*const c_char
, size_t
, *mut c_char
, size_t
) -> size_t
,
2365 ) -> LLVMRustResult
;
2366 pub fn LLVMRustSetLLVMOptions(Argc
: c_int
, Argv
: *const *const c_char
);
2367 pub fn LLVMRustPrintPasses();
2368 pub fn LLVMRustGetInstructionCount(M
: &Module
) -> u32;
2369 pub fn LLVMRustSetNormalizedTarget(M
: &Module
, triple
: *const c_char
);
2370 pub fn LLVMRustAddAlwaysInlinePass(P
: &PassManagerBuilder
, AddLifetimes
: bool
);
2371 pub fn LLVMRustRunRestrictionPass(M
: &Module
, syms
: *const *const c_char
, len
: size_t
);
2373 pub fn LLVMRustOpenArchive(path
: *const c_char
) -> Option
<&'
static mut Archive
>;
2374 pub fn LLVMRustArchiveIteratorNew(AR
: &Archive
) -> &mut ArchiveIterator
<'_
>;
2375 pub fn LLVMRustArchiveIteratorNext
<'a
>(
2376 AIR
: &ArchiveIterator
<'a
>,
2377 ) -> Option
<&'a
mut ArchiveChild
<'a
>>;
2378 pub fn LLVMRustArchiveChildName(ACR
: &ArchiveChild
<'_
>, size
: &mut size_t
) -> *const c_char
;
2379 pub fn LLVMRustArchiveChildData(ACR
: &ArchiveChild
<'_
>, size
: &mut size_t
) -> *const c_char
;
2380 pub fn LLVMRustArchiveChildFree
<'a
>(ACR
: &'a
mut ArchiveChild
<'a
>);
2381 pub fn LLVMRustArchiveIteratorFree
<'a
>(AIR
: &'a
mut ArchiveIterator
<'a
>);
2382 pub fn LLVMRustDestroyArchive(AR
: &'
static mut Archive
);
2384 #[allow(improper_ctypes)]
2385 pub fn LLVMRustWriteTwineToString(T
: &Twine
, s
: &RustString
);
2387 #[allow(improper_ctypes)]
2388 pub fn LLVMRustUnpackOptimizationDiagnostic
<'a
>(
2389 DI
: &'a DiagnosticInfo
,
2390 pass_name_out
: &RustString
,
2391 function_out
: &mut Option
<&'a Value
>,
2392 loc_line_out
: &mut c_uint
,
2393 loc_column_out
: &mut c_uint
,
2394 loc_filename_out
: &RustString
,
2395 message_out
: &RustString
,
2398 pub fn LLVMRustUnpackInlineAsmDiagnostic
<'a
>(
2399 DI
: &'a DiagnosticInfo
,
2400 level_out
: &mut DiagnosticLevel
,
2401 cookie_out
: &mut c_uint
,
2402 message_out
: &mut Option
<&'a Twine
>,
2405 #[allow(improper_ctypes)]
2406 pub fn LLVMRustWriteDiagnosticInfoToString(DI
: &DiagnosticInfo
, s
: &RustString
);
2407 pub fn LLVMRustGetDiagInfoKind(DI
: &DiagnosticInfo
) -> DiagnosticKind
;
2409 pub fn LLVMRustGetSMDiagnostic
<'a
>(
2410 DI
: &'a DiagnosticInfo
,
2411 cookie_out
: &mut c_uint
,
2412 ) -> &'a SMDiagnostic
;
2414 pub fn LLVMRustSetInlineAsmDiagnosticHandler(
2416 H
: InlineAsmDiagHandlerTy
,
2420 #[allow(improper_ctypes)]
2421 pub fn LLVMRustUnpackSMDiagnostic(
2423 message_out
: &RustString
,
2424 buffer_out
: &RustString
,
2425 level_out
: &mut DiagnosticLevel
,
2426 loc_out
: &mut c_uint
,
2427 ranges_out
: *mut c_uint
,
2428 num_ranges
: &mut usize,
2431 pub fn LLVMRustWriteArchive(
2434 Members
: *const &RustArchiveMember
<'_
>,
2437 ) -> LLVMRustResult
;
2438 pub fn LLVMRustArchiveMemberNew
<'a
>(
2439 Filename
: *const c_char
,
2440 Name
: *const c_char
,
2441 Child
: Option
<&ArchiveChild
<'a
>>,
2442 ) -> &'a
mut RustArchiveMember
<'a
>;
2443 pub fn LLVMRustArchiveMemberFree
<'a
>(Member
: &'a
mut RustArchiveMember
<'a
>);
2445 pub fn LLVMRustWriteImportLibrary(
2446 ImportName
: *const c_char
,
2447 Path
: *const c_char
,
2448 Exports
: *const LLVMRustCOFFShortExport
,
2452 ) -> LLVMRustResult
;
2454 pub fn LLVMRustSetDataLayoutFromTargetMachine
<'a
>(M
: &'a Module
, TM
: &'a TargetMachine
);
2456 pub fn LLVMRustBuildOperandBundleDef
<'a
>(
2457 Name
: *const c_char
,
2458 Inputs
: *const &'a Value
,
2460 ) -> &'a
mut OperandBundleDef
<'a
>;
2461 pub fn LLVMRustFreeOperandBundleDef
<'a
>(Bundle
: &'a
mut OperandBundleDef
<'a
>);
2463 pub fn LLVMRustPositionBuilderAtStart
<'a
>(B
: &Builder
<'a
>, BB
: &'a BasicBlock
);
2465 pub fn LLVMRustSetComdat
<'a
>(M
: &'a Module
, V
: &'a Value
, Name
: *const c_char
, NameLen
: size_t
);
2466 pub fn LLVMRustUnsetComdat(V
: &Value
);
2467 pub fn LLVMRustSetModulePICLevel(M
: &Module
);
2468 pub fn LLVMRustSetModulePIELevel(M
: &Module
);
2469 pub fn LLVMRustSetModuleCodeModel(M
: &Module
, Model
: CodeModel
);
2470 pub fn LLVMRustModuleBufferCreate(M
: &Module
) -> &'
static mut ModuleBuffer
;
2471 pub fn LLVMRustModuleBufferPtr(p
: &ModuleBuffer
) -> *const u8;
2472 pub fn LLVMRustModuleBufferLen(p
: &ModuleBuffer
) -> usize;
2473 pub fn LLVMRustModuleBufferFree(p
: &'
static mut ModuleBuffer
);
2474 pub fn LLVMRustModuleCost(M
: &Module
) -> u64;
2476 pub fn LLVMRustThinLTOBufferCreate(M
: &Module
) -> &'
static mut ThinLTOBuffer
;
2477 pub fn LLVMRustThinLTOBufferFree(M
: &'
static mut ThinLTOBuffer
);
2478 pub fn LLVMRustThinLTOBufferPtr(M
: &ThinLTOBuffer
) -> *const c_char
;
2479 pub fn LLVMRustThinLTOBufferLen(M
: &ThinLTOBuffer
) -> size_t
;
2480 pub fn LLVMRustCreateThinLTOData(
2481 Modules
: *const ThinLTOModule
,
2483 PreservedSymbols
: *const *const c_char
,
2484 PreservedSymbolsLen
: c_uint
,
2485 ) -> Option
<&'
static mut ThinLTOData
>;
2486 pub fn LLVMRustPrepareThinLTORename(
2489 Target
: &TargetMachine
,
2491 pub fn LLVMRustPrepareThinLTOResolveWeak(Data
: &ThinLTOData
, Module
: &Module
) -> bool
;
2492 pub fn LLVMRustPrepareThinLTOInternalize(Data
: &ThinLTOData
, Module
: &Module
) -> bool
;
2493 pub fn LLVMRustPrepareThinLTOImport(
2496 Target
: &TargetMachine
,
2498 pub fn LLVMRustGetThinLTOModuleImports(
2499 Data
: *const ThinLTOData
,
2500 ModuleNameCallback
: ThinLTOModuleNameCallback
,
2501 CallbackPayload
: *mut c_void
,
2503 pub fn LLVMRustFreeThinLTOData(Data
: &'
static mut ThinLTOData
);
2504 pub fn LLVMRustParseBitcodeForLTO(
2508 Identifier
: *const c_char
,
2509 ) -> Option
<&Module
>;
2510 pub fn LLVMRustGetBitcodeSliceFromObjectData(
2513 out_len
: &mut usize,
2515 pub fn LLVMRustLTOGetDICompileUnit(M
: &Module
, CU1
: &mut *mut c_void
, CU2
: &mut *mut c_void
);
2516 pub fn LLVMRustLTOPatchDICompileUnit(M
: &Module
, CU
: *mut c_void
);
2518 pub fn LLVMRustLinkerNew(M
: &Module
) -> &mut Linker
<'_
>;
2519 pub fn LLVMRustLinkerAdd(
2520 linker
: &Linker
<'_
>,
2521 bytecode
: *const c_char
,
2522 bytecode_len
: usize,
2524 pub fn LLVMRustLinkerFree
<'a
>(linker
: &'a
mut Linker
<'a
>);
2525 #[allow(improper_ctypes)]
2526 pub fn LLVMRustComputeLTOCacheKey(
2527 key_out
: &RustString
,
2528 mod_id
: *const c_char
,
2532 pub fn LLVMRustContextGetDiagnosticHandler(Context
: &Context
) -> Option
<&DiagnosticHandler
>;
2533 pub fn LLVMRustContextSetDiagnosticHandler(
2535 diagnostic_handler
: Option
<&DiagnosticHandler
>,
2537 pub fn LLVMRustContextConfigureDiagnosticHandler(
2539 diagnostic_handler_callback
: DiagnosticHandlerTy
,
2540 diagnostic_handler_context
: *mut c_void
,
2541 remark_all_passes
: bool
,
2542 remark_passes
: *const *const c_char
,
2543 remark_passes_len
: usize,
2546 #[allow(improper_ctypes)]
2547 pub fn LLVMRustGetMangledName(V
: &Value
, out
: &RustString
);