pub struct Builder<'a, 'll, 'tcx> {
    pub llbuilder: &'ll mut Builder<'ll>,
    pub cx: &'a CodegenCx<'ll, 'tcx>,
}

Fields§

§llbuilder: &'ll mut Builder<'ll>§cx: &'a CodegenCx<'ll, 'tcx>

Implementations§

source§

impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx>

source

fn with_cx(cx: &'a CodegenCx<'ll, 'tcx>) -> Self

source

pub fn llfn(&self) -> &'ll Value

source

fn position_at_start(&mut self, llbb: &'ll BasicBlock)

source

fn align_metadata(&mut self, load: &'ll Value, align: Align)

source

fn noundef_metadata(&mut self, load: &'ll Value)

source

pub fn minnum(&mut self, lhs: &'ll Value, rhs: &'ll Value) -> &'ll Value

source

pub fn maxnum(&mut self, lhs: &'ll Value, rhs: &'ll Value) -> &'ll Value

source

pub fn insert_element(
    &mut self,
    vec: &'ll Value,
    elt: &'ll Value,
    idx: &'ll Value
) -> &'ll Value

source

pub fn shuffle_vector(
    &mut self,
    v1: &'ll Value,
    v2: &'ll Value,
    mask: &'ll Value
) -> &'ll Value

source

pub fn vector_reduce_fadd(
    &mut self,
    acc: &'ll Value,
    src: &'ll Value
) -> &'ll Value

source

pub fn vector_reduce_fmul(
    &mut self,
    acc: &'ll Value,
    src: &'ll Value
) -> &'ll Value

source

pub fn vector_reduce_fadd_fast(
    &mut self,
    acc: &'ll Value,
    src: &'ll Value
) -> &'ll Value

source

pub fn vector_reduce_fmul_fast(
    &mut self,
    acc: &'ll Value,
    src: &'ll Value
) -> &'ll Value

source

pub fn vector_reduce_add(&mut self, src: &'ll Value) -> &'ll Value

source

pub fn vector_reduce_mul(&mut self, src: &'ll Value) -> &'ll Value

source

pub fn vector_reduce_and(&mut self, src: &'ll Value) -> &'ll Value

source

pub fn vector_reduce_or(&mut self, src: &'ll Value) -> &'ll Value

source

pub fn vector_reduce_xor(&mut self, src: &'ll Value) -> &'ll Value

source

pub fn vector_reduce_fmin(&mut self, src: &'ll Value) -> &'ll Value

source

pub fn vector_reduce_fmax(&mut self, src: &'ll Value) -> &'ll Value

source

pub fn vector_reduce_fmin_fast(&mut self, src: &'ll Value) -> &'ll Value

source

pub fn vector_reduce_fmax_fast(&mut self, src: &'ll Value) -> &'ll Value

source

pub fn vector_reduce_min(
    &mut self,
    src: &'ll Value,
    is_signed: bool
) -> &'ll Value

source

pub fn vector_reduce_max(
    &mut self,
    src: &'ll Value,
    is_signed: bool
) -> &'ll Value

source

pub fn add_clause(&mut self, landing_pad: &'ll Value, clause: &'ll Value)

source

pub fn catch_ret(
    &mut self,
    funclet: &Funclet<'ll>,
    unwind: &'ll BasicBlock
) -> &'ll Value

source

fn check_store(&mut self, val: &'ll Value, ptr: &'ll Value) -> &'ll Value

source

fn check_call<'b>(
    &mut self,
    typ: &str,
    fn_ty: &'ll Type,
    llfn: &'ll Value,
    args: &'b [&'ll Value]
) -> Cow<'b, [&'ll Value]>

source

pub fn va_arg(&mut self, list: &'ll Value, ty: &'ll Type) -> &'ll Value

source

pub(crate) fn call_intrinsic(
    &mut self,
    intrinsic: &str,
    args: &[&'ll Value]
) -> &'ll Value

source

fn call_lifetime_intrinsic(&mut self, intrinsic: &str, ptr: &'ll Value, size: Size)

source

pub(crate) fn phi(
    &mut self,
    ty: &'ll Type,
    vals: &[&'ll Value],
    bbs: &[&'ll BasicBlock]
) -> &'ll Value

source

fn add_incoming_to_phi(
    &mut self,
    phi: &'ll Value,
    val: &'ll Value,
    bb: &'ll BasicBlock
)

source

fn fptoint_sat(
    &mut self,
    signed: bool,
    val: &'ll Value,
    dest_ty: &'ll Type
) -> &'ll Value

source

pub(crate) fn landing_pad(
    &mut self,
    ty: &'ll Type,
    pers_fn: &'ll Value,
    num_clauses: usize
) -> &'ll Value

Methods from Deref<Target = CodegenCx<'ll, 'tcx>>§

source

pub fn const_array(&self, ty: &'ll Type, elts: &[&'ll Value]) -> &'ll Value

source

pub fn const_vector(&self, elts: &[&'ll Value]) -> &'ll Value

source

pub fn const_bytes(&self, bytes: &[u8]) -> &'ll Value

source

pub fn const_get_elt(&self, v: &'ll Value, idx: u64) -> &'ll Value

source

pub(crate) fn const_bitcast(&self, val: &'ll Value, ty: &'ll Type) -> &'ll Value

source

pub(crate) fn static_addr_of_mut(
    &self,
    cv: &'ll Value,
    align: Align,
    kind: Option<&str>
) -> &'ll Value

source

pub(crate) fn get_static(&self, def_id: DefId) -> &'ll Value

source

pub(crate) fn statics_to_rauw(&self) -> &RefCell<Vec<(&'ll Value, &'ll Value)>>

source

pub fn coverage_context(&self) -> Option<&CrateCoverageContext<'ll, 'tcx>>

source

pub(crate) fn create_used_variable_impl(
    &self,
    name: &'static CStr,
    values: &[&'ll Value]
)

source

pub(crate) fn get_intrinsic(&self, key: &str) -> (&'ll Type, &'ll Value)

source

fn insert_intrinsic(
    &self,
    name: &'static str,
    args: Option<&[&'ll Type]>,
    ret: &'ll Type
) -> (&'ll Type, &'ll Value)

source

fn declare_intrinsic(&self, key: &str) -> Option<(&'ll Type, &'ll Value)>

source

pub(crate) fn eh_catch_typeinfo(&self) -> &'ll Value

source

pub fn generate_local_symbol_name(&self, prefix: &str) -> String

Generates a new symbol name with the given prefix. This symbol name must only be used for definitions with internal or private linkage.

source

pub fn lookup_debug_loc(&self, pos: BytePos) -> DebugLoc

Looks up debug source information about a BytePos.

source

pub fn declare_global(&self, name: &str, ty: &'ll Type) -> &'ll Value

Declare a global value.

If there’s a value with the same name already declared, the function will return its Value instead.

source

pub fn declare_cfn(
    &self,
    name: &str,
    unnamed: UnnamedAddr,
    fn_type: &'ll Type
) -> &'ll Value

Declare a C ABI function.

Only use this for foreign function ABIs and glue. For Rust functions use declare_fn instead.

If there’s a value with the same name already declared, the function will update the declaration and return existing Value instead.

source

pub fn declare_entry_fn(
    &self,
    name: &str,
    callconv: CallConv,
    unnamed: UnnamedAddr,
    fn_type: &'ll Type
) -> &'ll Value

Declare an entry Function

The ABI of this function can change depending on the target (although for now the same as declare_cfn)

If there’s a value with the same name already declared, the function will update the declaration and return existing Value instead.

source

pub fn declare_fn(&self, name: &str, fn_abi: &FnAbi<'tcx, Ty<'tcx>>) -> &'ll Value

Declare a Rust function.

If there’s a value with the same name already declared, the function will update the declaration and return existing Value instead.

source

pub fn define_global(&self, name: &str, ty: &'ll Type) -> Option<&'ll Value>

Declare a global with an intention to define it.

Use this function when you intend to define a global. This function will return None if the name already has a definition associated with it. In that case an error should be reported to the user, because it usually happens due to user’s fault (e.g., misuse of #[no_mangle] or #[export_name] attributes).

source

pub fn define_private_global(&self, ty: &'ll Type) -> &'ll Value

Declare a private global

Use this function when you intend to define a global without a name.

source

pub fn get_declared_value(&self, name: &str) -> Option<&'ll Value>

Gets declared value by name.

source

pub fn get_defined_value(&self, name: &str) -> Option<&'ll Value>

Gets defined or externally defined (AvailableExternally linkage) value by name.

source

pub(crate) unsafe fn should_assume_dso_local(
    &self,
    llval: &Value,
    is_declaration: bool
) -> bool

Whether a definition or declaration can be assumed to be local to a group of libraries that form a single DSO or executable.

source

pub(crate) fn type_named_struct(&self, name: &str) -> &'ll Type

source

pub(crate) fn set_struct_body(
    &self,
    ty: &'ll Type,
    els: &[&'ll Type],
    packed: bool
)

source

pub(crate) fn type_void(&self) -> &'ll Type

source

pub(crate) fn type_metadata(&self) -> &'ll Type

source

pub(crate) fn type_ix(&self, num_bits: u64) -> &'ll Type

x Creates an integer type with the given number of bits, e.g., i24

source

pub(crate) fn type_vector(&self, ty: &'ll Type, len: u64) -> &'ll Type

source

pub(crate) fn func_params_types(&self, ty: &'ll Type) -> Vec<&'ll Type>

source

pub(crate) fn type_bool(&self) -> &'ll Type

source

pub(crate) fn type_int_from_ty(&self, t: IntTy) -> &'ll Type

source

pub(crate) fn type_uint_from_ty(&self, t: UintTy) -> &'ll Type

source

pub(crate) fn type_float_from_ty(&self, t: FloatTy) -> &'ll Type

source

pub(crate) fn type_pointee_for_align(&self, align: Align) -> &'ll Type

source

pub(crate) fn type_padding_filler(&self, size: Size, align: Align) -> &'ll Type

Return a LLVM type that has at most the required alignment, and exactly the required size, as a best-effort padding array.

source

pub(crate) fn type_variadic_func(
    &self,
    args: &[&'ll Type],
    ret: &'ll Type
) -> &'ll Type

source

pub fn align_of(&self, ty: Ty<'tcx>) -> Align

source

pub fn size_of(&self, ty: Ty<'tcx>) -> Size

source

pub fn size_and_align_of(&self, ty: Ty<'tcx>) -> (Size, Align)

Trait Implementations§

source§

impl<'tcx> AbiBuilderMethods<'tcx> for Builder<'_, '_, 'tcx>

source§

fn get_param(&mut self, index: usize) -> Self::Value

source§

impl<'ll, 'tcx> ArgAbiMethods<'tcx> for Builder<'_, 'll, 'tcx>

source§

fn store_fn_arg(
    &mut self,
    arg_abi: &ArgAbi<'tcx, Ty<'tcx>>,
    idx: &mut usize,
    dst: PlaceRef<'tcx, Self::Value>
)

source§

fn store_arg(
    &mut self,
    arg_abi: &ArgAbi<'tcx, Ty<'tcx>>,
    val: &'ll Value,
    dst: PlaceRef<'tcx, &'ll Value>
)

source§

fn arg_memory_ty(&self, arg_abi: &ArgAbi<'tcx, Ty<'tcx>>) -> &'ll Type

source§

impl<'ll, 'tcx> AsmBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx>

source§

fn codegen_inline_asm(
    &mut self,
    template: &[InlineAsmTemplatePiece],
    operands: &[InlineAsmOperandRef<'tcx, Self>],
    options: InlineAsmOptions,
    line_spans: &[Span],
    instance: Instance<'_>,
    dest_catch_funclet: Option<(Self::BasicBlock, Self::BasicBlock, Option<&Self::Funclet>)>
)

Take an inline assembly expression and splat it out via LLVM
source§

impl<'ll, 'tcx> BackendTypes for Builder<'_, 'll, 'tcx>

§

type Value = &'ll Value

§

type Function = &'ll Value

§

type BasicBlock = &'ll BasicBlock

§

type Type = &'ll Type

§

type Funclet = Funclet<'ll>

§

type DIScope = &'ll Metadata

§

type DILocation = &'ll Metadata

§

type DIVariable = &'ll Metadata

source§

impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx>

source§

fn build(cx: &'a CodegenCx<'ll, 'tcx>, llbb: &'ll BasicBlock) -> Self

source§

fn cx(&self) -> &CodegenCx<'ll, 'tcx>

source§

fn llbb(&self) -> &'ll BasicBlock

source§

fn set_span(&mut self, _span: Span)

source§

fn append_block(
    cx: &'a CodegenCx<'ll, 'tcx>,
    llfn: &'ll Value,
    name: &str
) -> &'ll BasicBlock

source§

fn append_sibling_block(&mut self, name: &str) -> &'ll BasicBlock

source§

fn switch_to_block(&mut self, llbb: Self::BasicBlock)

source§

fn ret_void(&mut self)

source§

fn ret(&mut self, v: &'ll Value)

source§

fn br(&mut self, dest: &'ll BasicBlock)

source§

fn cond_br(
    &mut self,
    cond: &'ll Value,
    then_llbb: &'ll BasicBlock,
    else_llbb: &'ll BasicBlock
)

source§

fn switch(
    &mut self,
    v: &'ll Value,
    else_llbb: &'ll BasicBlock,
    cases: impl ExactSizeIterator<Item = (u128, &'ll BasicBlock)>
)

source§

fn invoke(
    &mut self,
    llty: &'ll Type,
    fn_abi: Option<&FnAbi<'tcx, Ty<'tcx>>>,
    llfn: &'ll Value,
    args: &[&'ll Value],
    then: &'ll BasicBlock,
    catch: &'ll BasicBlock,
    funclet: Option<&Funclet<'ll>>
) -> &'ll Value

source§

fn unreachable(&mut self)

source§

fn add(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn fadd(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn sub(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn fsub(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn mul(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn fmul(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn udiv(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn exactudiv(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn sdiv(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn exactsdiv(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn fdiv(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn urem(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn srem(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn frem(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn shl(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn lshr(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn ashr(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn and(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn or(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn xor(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value

source§

fn neg(&mut self, x: &'ll Value) -> &'ll Value

source§

fn fneg(&mut self, x: &'ll Value) -> &'ll Value

source§

fn not(&mut self, x: &'ll Value) -> &'ll Value

source§

fn unchecked_sadd(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value

source§

fn unchecked_uadd(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value

source§

fn unchecked_ssub(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value

source§

fn unchecked_usub(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value

source§

fn unchecked_smul(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value

source§

fn unchecked_umul(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value

source§

fn fadd_fast(&mut self, lhs: &'ll Value, rhs: &'ll Value) -> &'ll Value

source§

fn fsub_fast(&mut self, lhs: &'ll Value, rhs: &'ll Value) -> &'ll Value

source§

fn fmul_fast(&mut self, lhs: &'ll Value, rhs: &'ll Value) -> &'ll Value

source§

fn fdiv_fast(&mut self, lhs: &'ll Value, rhs: &'ll Value) -> &'ll Value

source§

fn frem_fast(&mut self, lhs: &'ll Value, rhs: &'ll Value) -> &'ll Value

source§

fn checked_binop(
    &mut self,
    oop: OverflowOp,
    ty: Ty<'_>,
    lhs: Self::Value,
    rhs: Self::Value
) -> (Self::Value, Self::Value)

source§

fn from_immediate(&mut self, val: Self::Value) -> Self::Value

source§

fn to_immediate_scalar(&mut self, val: Self::Value, scalar: Scalar) -> Self::Value

source§

fn alloca(&mut self, ty: &'ll Type, align: Align) -> &'ll Value

source§

fn byte_array_alloca(&mut self, len: &'ll Value, align: Align) -> &'ll Value

source§

fn load(&mut self, ty: &'ll Type, ptr: &'ll Value, align: Align) -> &'ll Value

source§

fn volatile_load(&mut self, ty: &'ll Type, ptr: &'ll Value) -> &'ll Value

source§

fn atomic_load(
    &mut self,
    ty: &'ll Type,
    ptr: &'ll Value,
    order: AtomicOrdering,
    size: Size
) -> &'ll Value

source§

fn load_operand(
    &mut self,
    place: PlaceRef<'tcx, &'ll Value>
) -> OperandRef<'tcx, &'ll Value>

source§

fn write_operand_repeatedly(
    &mut self,
    cg_elem: OperandRef<'tcx, &'ll Value>,
    count: u64,
    dest: PlaceRef<'tcx, &'ll Value>
)

Called for Rvalue::Repeat when the elem is neither a ZST nor optimizable using memset.
source§

fn range_metadata(&mut self, load: &'ll Value, range: WrappingRange)

source§

fn nonnull_metadata(&mut self, load: &'ll Value)

source§

fn store(&mut self, val: &'ll Value, ptr: &'ll Value, align: Align) -> &'ll Value

source§

fn store_with_flags(
    &mut self,
    val: &'ll Value,
    ptr: &'ll Value,
    align: Align,
    flags: MemFlags
) -> &'ll Value

source§

fn atomic_store(
    &mut self,
    val: &'ll Value,
    ptr: &'ll Value,
    order: AtomicOrdering,
    size: Size
)

source§

fn gep(
    &mut self,
    ty: &'ll Type,
    ptr: &'ll Value,
    indices: &[&'ll Value]
) -> &'ll Value

source§

fn inbounds_gep(
    &mut self,
    ty: &'ll Type,
    ptr: &'ll Value,
    indices: &[&'ll Value]
) -> &'ll Value

source§

fn struct_gep(&mut self, ty: &'ll Type, ptr: &'ll Value, idx: u64) -> &'ll Value

source§

fn trunc(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value

source§

fn sext(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value

source§

fn fptoui_sat(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value

source§

fn fptosi_sat(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value

source§

fn fptoui(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value

source§

fn fptosi(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value

source§

fn uitofp(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value

source§

fn sitofp(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value

source§

fn fptrunc(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value

source§

fn fpext(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value

source§

fn ptrtoint(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value

source§

fn inttoptr(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value

source§

fn bitcast(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value

source§

fn intcast(
    &mut self,
    val: &'ll Value,
    dest_ty: &'ll Type,
    is_signed: bool
) -> &'ll Value

source§

fn pointercast(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value

source§

fn icmp(
    &mut self,
    op: IntPredicate,
    lhs: &'ll Value,
    rhs: &'ll Value
) -> &'ll Value

source§

fn fcmp(
    &mut self,
    op: RealPredicate,
    lhs: &'ll Value,
    rhs: &'ll Value
) -> &'ll Value

source§

fn memcpy(
    &mut self,
    dst: &'ll Value,
    dst_align: Align,
    src: &'ll Value,
    src_align: Align,
    size: &'ll Value,
    flags: MemFlags
)

source§

fn memmove(
    &mut self,
    dst: &'ll Value,
    dst_align: Align,
    src: &'ll Value,
    src_align: Align,
    size: &'ll Value,
    flags: MemFlags
)

source§

fn memset(
    &mut self,
    ptr: &'ll Value,
    fill_byte: &'ll Value,
    size: &'ll Value,
    align: Align,
    flags: MemFlags
)

source§

fn select(
    &mut self,
    cond: &'ll Value,
    then_val: &'ll Value,
    else_val: &'ll Value
) -> &'ll Value

source§

fn va_arg(&mut self, list: &'ll Value, ty: &'ll Type) -> &'ll Value

source§

fn extract_element(&mut self, vec: &'ll Value, idx: &'ll Value) -> &'ll Value

source§

fn vector_splat(&mut self, num_elts: usize, elt: &'ll Value) -> &'ll Value

source§

fn extract_value(&mut self, agg_val: &'ll Value, idx: u64) -> &'ll Value

source§

fn insert_value(
    &mut self,
    agg_val: &'ll Value,
    elt: &'ll Value,
    idx: u64
) -> &'ll Value

source§

fn set_personality_fn(&mut self, personality: &'ll Value)

source§

fn cleanup_landing_pad(
    &mut self,
    pers_fn: &'ll Value
) -> (&'ll Value, &'ll Value)

source§

fn resume(&mut self, exn0: &'ll Value, exn1: &'ll Value)

source§

fn cleanup_pad(
    &mut self,
    parent: Option<&'ll Value>,
    args: &[&'ll Value]
) -> Funclet<'ll>

source§

fn cleanup_ret(&mut self, funclet: &Funclet<'ll>, unwind: Option<&'ll BasicBlock>)

source§

fn catch_pad(&mut self, parent: &'ll Value, args: &[&'ll Value]) -> Funclet<'ll>

source§

fn catch_switch(
    &mut self,
    parent: Option<&'ll Value>,
    unwind: Option<&'ll BasicBlock>,
    handlers: &[&'ll BasicBlock]
) -> &'ll Value

source§

fn atomic_cmpxchg(
    &mut self,
    dst: &'ll Value,
    cmp: &'ll Value,
    src: &'ll Value,
    order: AtomicOrdering,
    failure_order: AtomicOrdering,
    weak: bool
) -> &'ll Value

source§

fn atomic_rmw(
    &mut self,
    op: AtomicRmwBinOp,
    dst: &'ll Value,
    src: &'ll Value,
    order: AtomicOrdering
) -> &'ll Value

source§

fn atomic_fence(&mut self, order: AtomicOrdering, scope: SynchronizationScope)

source§

fn set_invariant_load(&mut self, load: &'ll Value)

source§

fn lifetime_start(&mut self, ptr: &'ll Value, size: Size)

Called for StorageLive
source§

fn lifetime_end(&mut self, ptr: &'ll Value, size: Size)

Called for StorageDead
source§

fn instrprof_increment(
    &mut self,
    fn_name: &'ll Value,
    hash: &'ll Value,
    num_counters: &'ll Value,
    index: &'ll Value
)

source§

fn call(
    &mut self,
    llty: &'ll Type,
    fn_abi: Option<&FnAbi<'tcx, Ty<'tcx>>>,
    llfn: &'ll Value,
    args: &[&'ll Value],
    funclet: Option<&Funclet<'ll>>
) -> &'ll Value

source§

fn zext(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value

source§

fn do_not_inline(&mut self, llret: &'ll Value)

source§

fn to_immediate(
    &mut self,
    val: Self::Value,
    layout: TyAndLayout<'_, Ty<'_>>
) -> Self::Value

source§

fn cast_float_to_int(
    &mut self,
    signed: bool,
    x: Self::Value,
    dest_ty: Self::Type
) -> Self::Value

source§

impl<'tcx> CoverageInfoBuilderMethods<'tcx> for Builder<'_, '_, 'tcx>

source§

fn set_function_source_hash(
    &mut self,
    instance: Instance<'tcx>,
    function_source_hash: u64
) -> bool

Returns true if the function source hash was added to the coverage map (even if it had already been added, for this instance). Returns false only if -C instrument-coverage is not enabled (a coverage map is not being generated).
source§

fn add_coverage_counter(
    &mut self,
    instance: Instance<'tcx>,
    id: CounterValueReference,
    region: CodeRegion
) -> bool

Returns true if the counter was added to the coverage map; false if -C instrument-coverage is not enabled (a coverage map is not being generated).
source§

fn add_coverage_counter_expression(
    &mut self,
    instance: Instance<'tcx>,
    id: InjectedExpressionId,
    lhs: ExpressionOperandId,
    op: Op,
    rhs: ExpressionOperandId,
    region: Option<CodeRegion>
) -> bool

Returns true if the expression was added to the coverage map; false if -C instrument-coverage is not enabled (a coverage map is not being generated).
source§

fn add_coverage_unreachable(
    &mut self,
    instance: Instance<'tcx>,
    region: CodeRegion
) -> bool

Returns true if the region was added to the coverage map; false if -C instrument-coverage is not enabled (a coverage map is not being generated).
source§

impl<'ll> DebugInfoBuilderMethods for Builder<'_, 'll, '_>

source§

fn dbg_var_addr(
    &mut self,
    dbg_var: &'ll DIVariable,
    dbg_loc: &'ll DILocation,
    variable_alloca: Self::Value,
    direct_offset: Size,
    indirect_offsets: &[Size],
    fragment: Option<Range<Size>>
)

source§

fn set_dbg_loc(&mut self, dbg_loc: &'ll DILocation)

source§

fn insert_reference_to_gdb_debug_scripts_section_global(&mut self)

source§

fn set_var_name(&mut self, value: &'ll Value, name: &str)

source§

impl<'ll, 'tcx> Deref for Builder<'_, 'll, 'tcx>

§

type Target = CodegenCx<'ll, 'tcx>

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl Drop for Builder<'_, '_, '_>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<'tcx> FnAbiOfHelpers<'tcx> for Builder<'_, '_, 'tcx>

§

type FnAbiOfResult = &'tcx FnAbi<'tcx, Ty<'tcx>>

The &FnAbi-wrapping type (or &FnAbi itself), which will be returned from fn_abi_of_* (see also handle_fn_abi_err).
source§

fn handle_fn_abi_err(
    &self,
    err: FnAbiError<'tcx>,
    span: Span,
    fn_abi_request: FnAbiRequest<'tcx>
) -> !

Helper used for fn_abi_of_*, to adapt tcx.fn_abi_of_*(...) into a Self::FnAbiOfResult (which does not need to be a Result<...>). Read more
source§

impl<'ll, 'tcx> HasCodegen<'tcx> for Builder<'_, 'll, 'tcx>

§

type CodegenCx = CodegenCx<'ll, 'tcx>

source§

impl HasDataLayout for Builder<'_, '_, '_>

source§

impl<'tcx> HasParamEnv<'tcx> for Builder<'_, '_, 'tcx>

source§

fn param_env(&self) -> ParamEnv<'tcx>

source§

impl HasTargetSpec for Builder<'_, '_, '_>

source§

impl<'tcx> HasTyCtxt<'tcx> for Builder<'_, '_, 'tcx>

source§

fn tcx(&self) -> TyCtxt<'tcx>

source§

impl<'ll, 'tcx> IntrinsicCallMethods<'tcx> for Builder<'_, 'll, 'tcx>

source§

fn codegen_intrinsic_call(
    &mut self,
    instance: Instance<'tcx>,
    fn_abi: &FnAbi<'tcx, Ty<'tcx>>,
    args: &[OperandRef<'tcx, &'ll Value>],
    llresult: &'ll Value,
    span: Span
)

Remember to add all intrinsics here, in compiler/rustc_hir_analysis/src/check/mod.rs, and in library/core/src/intrinsics.rs; if you need access to any LLVM intrinsics, add them to compiler/rustc_codegen_llvm/src/context.rs.
source§

fn abort(&mut self)

source§

fn assume(&mut self, val: Self::Value)

source§

fn expect(&mut self, cond: Self::Value, expected: bool) -> Self::Value

source§

fn type_test(&mut self, pointer: Self::Value, typeid: Self::Value) -> Self::Value

Trait method used to test whether a given pointer is associated with a type identifier.
source§

fn type_checked_load(
    &mut self,
    llvtable: &'ll Value,
    vtable_byte_offset: u64,
    typeid: &'ll Value
) -> Self::Value

Trait method used to load a function while testing if it is associated with a type identifier.
source§

fn va_start(&mut self, va_list: &'ll Value) -> &'ll Value

Trait method used to inject va_start on the “spoofed” VaListImpl in Rust defined C-variadic functions.
source§

fn va_end(&mut self, va_list: &'ll Value) -> &'ll Value

Trait method used to inject va_end on the “spoofed” VaListImpl before Rust defined C-variadic functions return.
source§

impl<'tcx> LayoutOfHelpers<'tcx> for Builder<'_, '_, 'tcx>

§

type LayoutOfResult = TyAndLayout<'tcx, Ty<'tcx>>

The TyAndLayout-wrapping type (or TyAndLayout itself), which will be returned from layout_of (see also handle_layout_err).
source§

fn handle_layout_err(&self, err: LayoutError<'tcx>, span: Span, ty: Ty<'tcx>) -> !

Helper used for layout_of, to adapt tcx.layout_of(...) into a Self::LayoutOfResult (which does not need to be a Result<...>). Read more
source§

fn layout_tcx_at_span(&self) -> Span

Span to use for tcx.at(span), from layout_of.
source§

impl<'ll> StaticBuilderMethods for Builder<'_, 'll, '_>

source§

fn get_static(&mut self, def_id: DefId) -> &'ll Value

Auto Trait Implementations§

§

impl<'a, 'll, 'tcx> !RefUnwindSafe for Builder<'a, 'll, 'tcx>

§

impl<'a, 'll, 'tcx> !Send for Builder<'a, 'll, 'tcx>

§

impl<'a, 'll, 'tcx> !Sync for Builder<'a, 'll, 'tcx>

§

impl<'a, 'll, 'tcx> Unpin for Builder<'a, 'll, 'tcx>where
    'll: 'a,
    'tcx: 'a,

§

impl<'a, 'll, 'tcx> !UnwindSafe for Builder<'a, 'll, 'tcx>

Blanket Implementations§

source§

impl<T> Any for Twhere
    T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere
    T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere
    T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere
    U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere
    U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere
    U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.

Size: 16 bytes