pub(crate) 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>
impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx>
fn with_cx(cx: &'a CodegenCx<'ll, 'tcx>) -> Self
pub(crate) fn llfn(&self) -> &'ll Value
fn position_at_start(&mut self, llbb: &'ll BasicBlock)
fn align_metadata(&mut self, load: &'ll Value, align: Align)
fn noundef_metadata(&mut self, load: &'ll Value)
pub(crate) fn set_unpredictable(&mut self, inst: &'ll Value)
pub(crate) fn minnum(&mut self, lhs: &'ll Value, rhs: &'ll Value) -> &'ll Value
pub(crate) fn maxnum(&mut self, lhs: &'ll Value, rhs: &'ll Value) -> &'ll Value
pub(crate) fn insert_element( &mut self, vec: &'ll Value, elt: &'ll Value, idx: &'ll Value, ) -> &'ll Value
pub(crate) fn shuffle_vector( &mut self, v1: &'ll Value, v2: &'ll Value, mask: &'ll Value, ) -> &'ll Value
pub(crate) fn vector_reduce_fadd( &mut self, acc: &'ll Value, src: &'ll Value, ) -> &'ll Value
pub(crate) fn vector_reduce_fmul( &mut self, acc: &'ll Value, src: &'ll Value, ) -> &'ll Value
pub(crate) fn vector_reduce_fadd_reassoc( &mut self, acc: &'ll Value, src: &'ll Value, ) -> &'ll Value
pub(crate) fn vector_reduce_fmul_reassoc( &mut self, acc: &'ll Value, src: &'ll Value, ) -> &'ll Value
pub(crate) fn vector_reduce_add(&mut self, src: &'ll Value) -> &'ll Value
pub(crate) fn vector_reduce_mul(&mut self, src: &'ll Value) -> &'ll Value
pub(crate) fn vector_reduce_and(&mut self, src: &'ll Value) -> &'ll Value
pub(crate) fn vector_reduce_or(&mut self, src: &'ll Value) -> &'ll Value
pub(crate) fn vector_reduce_xor(&mut self, src: &'ll Value) -> &'ll Value
pub(crate) fn vector_reduce_fmin(&mut self, src: &'ll Value) -> &'ll Value
pub(crate) fn vector_reduce_fmax(&mut self, src: &'ll Value) -> &'ll Value
pub(crate) fn vector_reduce_min( &mut self, src: &'ll Value, is_signed: bool, ) -> &'ll Value
pub(crate) fn vector_reduce_max( &mut self, src: &'ll Value, is_signed: bool, ) -> &'ll Value
pub(crate) fn add_clause(&mut self, landing_pad: &'ll Value, clause: &'ll Value)
pub(crate) fn catch_ret( &mut self, funclet: &Funclet<'ll>, unwind: &'ll BasicBlock, ) -> &'ll Value
fn check_call<'b>( &mut self, typ: &str, fn_ty: &'ll Type, llfn: &'ll Value, args: &'b [&'ll Value], ) -> Cow<'b, [&'ll Value]>
pub(crate) fn va_arg(&mut self, list: &'ll Value, ty: &'ll Type) -> &'ll Value
pub(crate) fn call_intrinsic( &mut self, intrinsic: &str, args: &[&'ll Value], ) -> &'ll Value
fn call_lifetime_intrinsic( &mut self, intrinsic: &str, ptr: &'ll Value, size: Size, )
pub(crate) fn phi( &mut self, ty: &'ll Type, vals: &[&'ll Value], bbs: &[&'ll BasicBlock], ) -> &'ll Value
fn add_incoming_to_phi( &mut self, phi: &'ll Value, val: &'ll Value, bb: &'ll BasicBlock, )
fn fptoint_sat( &mut self, signed: bool, val: &'ll Value, dest_ty: &'ll Type, ) -> &'ll Value
pub(crate) fn landing_pad( &mut self, ty: &'ll Type, pers_fn: &'ll Value, num_clauses: usize, ) -> &'ll Value
pub(crate) fn callbr( &mut self, llty: &'ll Type, fn_attrs: Option<&CodegenFnAttrs>, fn_abi: Option<&FnAbi<'tcx, Ty<'tcx>>>, llfn: &'ll Value, args: &[&'ll Value], default_dest: &'ll BasicBlock, indirect_dest: &[&'ll BasicBlock], funclet: Option<&Funclet<'ll>>, instance: Option<Instance<'tcx>>, ) -> &'ll Value
fn cfi_type_test( &mut self, fn_attrs: Option<&CodegenFnAttrs>, fn_abi: Option<&FnAbi<'tcx, Ty<'tcx>>>, instance: Option<Instance<'tcx>>, llfn: &'ll Value, )
fn kcfi_operand_bundle( &mut self, fn_attrs: Option<&CodegenFnAttrs>, fn_abi: Option<&FnAbi<'tcx, Ty<'tcx>>>, instance: Option<Instance<'tcx>>, llfn: &'ll Value, ) -> Option<OperandBundleOwned<'ll>>
Sourcepub(crate) fn instrprof_increment(
&mut self,
fn_name: &'ll Value,
hash: &'ll Value,
num_counters: &'ll Value,
index: &'ll Value,
)
pub(crate) fn instrprof_increment( &mut self, fn_name: &'ll Value, hash: &'ll Value, num_counters: &'ll Value, index: &'ll Value, )
Emits a call to llvm.instrprof.increment
. Used by coverage instrumentation.
Sourcepub(crate) fn mcdc_parameters(
&mut self,
fn_name: &'ll Value,
hash: &'ll Value,
bitmap_bits: &'ll Value,
)
pub(crate) fn mcdc_parameters( &mut self, fn_name: &'ll Value, hash: &'ll Value, bitmap_bits: &'ll Value, )
Emits a call to llvm.instrprof.mcdc.parameters
.
This doesn’t produce any code directly, but is used as input by the LLVM pass that handles coverage instrumentation.
(See clang’s CodeGenPGO::emitMCDCParameters
for comparison.)
pub(crate) fn mcdc_tvbitmap_update( &mut self, fn_name: &'ll Value, hash: &'ll Value, bitmap_index: &'ll Value, mcdc_temp: &'ll Value, )
pub(crate) fn mcdc_condbitmap_reset(&mut self, mcdc_temp: &'ll Value)
pub(crate) fn mcdc_condbitmap_update( &mut self, cond_index: &'ll Value, mcdc_temp: &'ll Value, )
Methods from Deref<Target = CodegenCx<'ll, 'tcx>>§
pub(crate) fn const_array( &self, ty: &'ll Type, elts: &[&'ll Value], ) -> &'ll Value
pub(crate) fn const_bytes(&self, bytes: &[u8]) -> &'ll Value
pub(crate) fn const_get_elt(&self, v: &'ll Value, idx: u64) -> &'ll Value
pub(crate) fn const_bitcast(&self, val: &'ll Value, ty: &'ll Type) -> &'ll Value
pub(crate) fn static_addr_of_mut( &self, cv: &'ll Value, align: Align, kind: Option<&str>, ) -> &'ll Value
pub(crate) fn get_static(&self, def_id: DefId) -> &'ll Value
fn get_static_inner(&self, def_id: DefId, llty: &'ll Type) -> &'ll Value
fn codegen_static_item(&self, def_id: DefId)
pub(crate) fn statics_to_rauw(&self) -> &RefCell<Vec<(&'ll Value, &'ll Value)>>
Sourcepub(crate) fn coverage_cx(&self) -> &CrateCoverageContext<'ll, 'tcx>
pub(crate) fn coverage_cx(&self) -> &CrateCoverageContext<'ll, 'tcx>
Extra state that is only available when coverage instrumentation is enabled.
pub(crate) fn create_used_variable_impl( &self, name: &'static CStr, values: &[&'ll Value], )
pub(crate) fn get_intrinsic(&self, key: &str) -> (&'ll Type, &'ll Value)
fn insert_intrinsic( &self, name: &'static str, args: Option<&[&'ll Type]>, ret: &'ll Type, ) -> (&'ll Type, &'ll Value)
fn declare_intrinsic(&self, key: &str) -> Option<(&'ll Type, &'ll Value)>
pub(crate) fn eh_catch_typeinfo(&self) -> &'ll Value
Sourcepub(crate) fn generate_local_symbol_name(&self, prefix: &str) -> String
pub(crate) 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.
Sourcepub(crate) fn set_metadata<'a>(
&self,
val: &'a Value,
kind_id: MetadataType,
md: &'a Metadata,
)
pub(crate) fn set_metadata<'a>( &self, val: &'a Value, kind_id: MetadataType, md: &'a Metadata, )
A wrapper for llvm::LLVMSetMetadata
, but it takes Metadata
as a parameter instead of Value
.
pub(crate) fn coverageinfo_finalize(&self)
Sourcefn covfun_section_name(&self) -> &CStr
fn covfun_section_name(&self) -> &CStr
Returns the section name to use when embedding per-function coverage information in the object file, according to the target’s object file format. LLVM’s coverage tools use information from this section when producing coverage reports.
Typical values are:
__llvm_covfun
on Linux__LLVM_COV,__llvm_covfun
on macOS (includes__LLVM_COV,
segment prefix).lcovfun$M
on Windows (includes$M
sorting suffix)
Sourcefn get_pgo_func_name_var(&self, instance: Instance<'tcx>) -> &'ll Value
fn get_pgo_func_name_var(&self, instance: Instance<'tcx>) -> &'ll Value
For LLVM codegen, returns a function-specific Value
for a global
string, to hold the function name passed to LLVM intrinsic
instrprof.increment()
. The Value
is only created once per instance.
Multiple invocations with the same instance return the same Value
.
Sourcefn lookup_debug_loc(&self, pos: BytePos) -> DebugLoc
fn lookup_debug_loc(&self, pos: BytePos) -> DebugLoc
Looks up debug source information about a BytePos
.
Sourcepub(crate) fn declare_global(&self, name: &str, ty: &'ll Type) -> &'ll Value
pub(crate) 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.
Sourcepub(crate) fn declare_cfn(
&self,
name: &str,
unnamed: UnnamedAddr,
fn_type: &'ll Type,
) -> &'ll Value
pub(crate) 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.
Sourcepub(crate) fn declare_entry_fn(
&self,
name: &str,
callconv: CallConv,
unnamed: UnnamedAddr,
fn_type: &'ll Type,
) -> &'ll Value
pub(crate) 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.
Sourcepub(crate) fn declare_fn(
&self,
name: &str,
fn_abi: &FnAbi<'tcx, Ty<'tcx>>,
instance: Option<Instance<'tcx>>,
) -> &'ll Value
pub(crate) fn declare_fn( &self, name: &str, fn_abi: &FnAbi<'tcx, Ty<'tcx>>, instance: Option<Instance<'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.
Sourcepub(crate) fn define_global(
&self,
name: &str,
ty: &'ll Type,
) -> Option<&'ll Value>
pub(crate) 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).
Sourcepub(crate) fn define_private_global(&self, ty: &'ll Type) -> &'ll Value
pub(crate) 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.
Sourcepub(crate) fn get_declared_value(&self, name: &str) -> Option<&'ll Value>
pub(crate) fn get_declared_value(&self, name: &str) -> Option<&'ll Value>
Gets declared value by name.
Sourcepub(crate) fn get_defined_value(&self, name: &str) -> Option<&'ll Value>
pub(crate) fn get_defined_value(&self, name: &str) -> Option<&'ll Value>
Gets defined or externally defined (AvailableExternally linkage) value by name.
Sourcepub(crate) fn should_assume_dso_local(
&self,
llval: &Value,
is_declaration: bool,
) -> bool
pub(crate) 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.
pub(crate) fn type_named_struct(&self, name: &str) -> &'ll Type
pub(crate) fn set_struct_body( &self, ty: &'ll Type, els: &[&'ll Type], packed: bool, )
pub(crate) fn type_void(&self) -> &'ll Type
pub(crate) fn type_token(&self) -> &'ll Type
pub(crate) fn type_metadata(&self) -> &'ll Type
Sourcepub(crate) fn type_ix(&self, num_bits: u64) -> &'ll Type
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
pub(crate) fn type_vector(&self, ty: &'ll Type, len: u64) -> &'ll Type
pub(crate) fn func_params_types(&self, ty: &'ll Type) -> Vec<&'ll Type>
pub(crate) fn type_bool(&self) -> &'ll Type
pub(crate) fn type_int_from_ty(&self, t: IntTy) -> &'ll Type
pub(crate) fn type_uint_from_ty(&self, t: UintTy) -> &'ll Type
pub(crate) fn type_float_from_ty(&self, t: FloatTy) -> &'ll Type
Sourcepub(crate) fn type_padding_filler(&self, size: Size, align: Align) -> &'ll Type
pub(crate) fn type_padding_filler(&self, size: Size, align: Align) -> &'ll Type
Return an LLVM type that has at most the required alignment, and exactly the required size, as a best-effort padding array.
pub(crate) fn type_variadic_func( &self, args: &[&'ll Type], ret: &'ll Type, ) -> &'ll Type
pub(crate) fn type_i1(&self) -> &'ll Type
pub(crate) fn type_struct(&self, els: &[&'ll Type], packed: bool) -> &'ll Type
pub(crate) fn align_of(&self, ty: Ty<'tcx>) -> Align
pub(crate) fn size_of(&self, ty: Ty<'tcx>) -> Size
pub(crate) fn size_and_align_of(&self, ty: Ty<'tcx>) -> (Size, Align)
Trait Implementations§
Source§impl<'tcx> AbiBuilderMethods<'tcx> for Builder<'_, '_, 'tcx>
impl<'tcx> AbiBuilderMethods<'tcx> for Builder<'_, '_, 'tcx>
Source§impl<'ll, 'tcx> ArgAbiBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx>
impl<'ll, 'tcx> ArgAbiBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx>
fn store_fn_arg( &mut self, arg_abi: &ArgAbi<'tcx, Ty<'tcx>>, idx: &mut usize, dst: PlaceRef<'tcx, Self::Value>, )
fn store_arg( &mut self, arg_abi: &ArgAbi<'tcx, Ty<'tcx>>, val: &'ll Value, dst: PlaceRef<'tcx, &'ll Value>, )
fn arg_memory_ty(&self, arg_abi: &ArgAbi<'tcx, Ty<'tcx>>) -> &'ll Type
Source§impl<'ll, 'tcx> AsmBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx>
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: Option<Self::BasicBlock>,
catch_funclet: Option<(Self::BasicBlock, Option<&Self::Funclet>)>,
)
fn codegen_inline_asm( &mut self, template: &[InlineAsmTemplatePiece], operands: &[InlineAsmOperandRef<'tcx, Self>], options: InlineAsmOptions, line_spans: &[Span], instance: Instance<'_>, dest: Option<Self::BasicBlock>, catch_funclet: Option<(Self::BasicBlock, Option<&Self::Funclet>)>, )
Source§impl<'ll, 'tcx> BackendTypes for Builder<'_, 'll, 'tcx>
impl<'ll, 'tcx> BackendTypes for Builder<'_, 'll, 'tcx>
type Value = &'ll Value
type Metadata = &'ll Metadata
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>
impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx>
type CodegenCx = CodegenCx<'ll, 'tcx>
fn build(cx: &'a CodegenCx<'ll, 'tcx>, llbb: &'ll BasicBlock) -> Self
fn cx(&self) -> &CodegenCx<'ll, 'tcx>
fn llbb(&self) -> &'ll BasicBlock
fn set_span(&mut self, _span: Span)
fn append_block( cx: &'a CodegenCx<'ll, 'tcx>, llfn: &'ll Value, name: &str, ) -> &'ll BasicBlock
fn append_sibling_block(&mut self, name: &str) -> &'ll BasicBlock
fn switch_to_block(&mut self, llbb: Self::BasicBlock)
fn ret_void(&mut self)
fn ret(&mut self, v: &'ll Value)
fn br(&mut self, dest: &'ll BasicBlock)
fn cond_br( &mut self, cond: &'ll Value, then_llbb: &'ll BasicBlock, else_llbb: &'ll BasicBlock, )
fn switch( &mut self, v: &'ll Value, else_llbb: &'ll BasicBlock, cases: impl ExactSizeIterator<Item = (u128, &'ll BasicBlock)>, )
fn invoke( &mut self, llty: &'ll Type, fn_attrs: Option<&CodegenFnAttrs>, fn_abi: Option<&FnAbi<'tcx, Ty<'tcx>>>, llfn: &'ll Value, args: &[&'ll Value], then: &'ll BasicBlock, catch: &'ll BasicBlock, funclet: Option<&Funclet<'ll>>, instance: Option<Instance<'tcx>>, ) -> &'ll Value
fn unreachable(&mut self)
fn add(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn fadd(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn sub(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn fsub(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn mul(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn fmul(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn udiv(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn exactudiv(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn sdiv(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn exactsdiv(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn fdiv(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn urem(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn srem(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
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
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
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
fn ashr(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn and(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn or(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn xor(&mut self, a: &'ll Value, b: &'ll Value) -> &'ll Value
fn neg(&mut self, x: &'ll Value) -> &'ll Value
fn fneg(&mut self, x: &'ll Value) -> &'ll Value
fn not(&mut self, x: &'ll Value) -> &'ll Value
fn unchecked_sadd(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn unchecked_uadd(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn unchecked_ssub(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn unchecked_usub(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn unchecked_smul(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn unchecked_umul(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn fadd_fast(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn fsub_fast(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn fmul_fast(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn fdiv_fast(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn frem_fast(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn fadd_algebraic(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn fsub_algebraic(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn fmul_algebraic(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn fdiv_algebraic(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn frem_algebraic(&mut self, x: &'ll Value, y: &'ll Value) -> &'ll Value
fn checked_binop( &mut self, oop: OverflowOp, ty: Ty<'_>, lhs: Self::Value, rhs: Self::Value, ) -> (Self::Value, Self::Value)
fn from_immediate(&mut self, val: Self::Value) -> Self::Value
fn to_immediate_scalar( &mut self, val: Self::Value, scalar: Scalar, ) -> Self::Value
fn alloca(&mut self, size: Size, align: Align) -> &'ll Value
fn dynamic_alloca(&mut self, size: &'ll Value, align: Align) -> &'ll Value
fn load(&mut self, ty: &'ll Type, ptr: &'ll Value, align: Align) -> &'ll Value
fn volatile_load(&mut self, ty: &'ll Type, ptr: &'ll Value) -> &'ll Value
fn atomic_load( &mut self, ty: &'ll Type, ptr: &'ll Value, order: AtomicOrdering, size: Size, ) -> &'ll Value
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>,
)
fn write_operand_repeatedly( &mut self, cg_elem: OperandRef<'tcx, &'ll Value>, count: u64, dest: PlaceRef<'tcx, &'ll Value>, )
fn range_metadata(&mut self, load: &'ll Value, range: WrappingRange)
fn nonnull_metadata(&mut self, load: &'ll Value)
fn store( &mut self, val: &'ll Value, ptr: &'ll Value, align: Align, ) -> &'ll Value
fn store_with_flags( &mut self, val: &'ll Value, ptr: &'ll Value, align: Align, flags: MemFlags, ) -> &'ll Value
fn atomic_store( &mut self, val: &'ll Value, ptr: &'ll Value, order: AtomicOrdering, size: Size, )
fn gep( &mut self, ty: &'ll Type, ptr: &'ll Value, indices: &[&'ll Value], ) -> &'ll Value
fn inbounds_gep( &mut self, ty: &'ll Type, ptr: &'ll Value, indices: &[&'ll Value], ) -> &'ll Value
fn trunc(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value
fn sext(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value
fn fptoui_sat(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value
fn fptosi_sat(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value
fn fptoui(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value
fn fptosi(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value
fn uitofp(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value
fn sitofp(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value
fn fptrunc(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value
fn fpext(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value
fn ptrtoint(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value
fn inttoptr(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value
fn bitcast(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value
fn intcast( &mut self, val: &'ll Value, dest_ty: &'ll Type, is_signed: bool, ) -> &'ll Value
fn pointercast(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value
fn icmp( &mut self, op: IntPredicate, lhs: &'ll Value, rhs: &'ll Value, ) -> &'ll Value
fn fcmp( &mut self, op: RealPredicate, lhs: &'ll Value, rhs: &'ll Value, ) -> &'ll Value
fn memcpy( &mut self, dst: &'ll Value, dst_align: Align, src: &'ll Value, src_align: Align, size: &'ll Value, flags: MemFlags, )
fn memmove( &mut self, dst: &'ll Value, dst_align: Align, src: &'ll Value, src_align: Align, size: &'ll Value, flags: MemFlags, )
fn memset( &mut self, ptr: &'ll Value, fill_byte: &'ll Value, size: &'ll Value, align: Align, flags: MemFlags, )
fn select( &mut self, cond: &'ll Value, then_val: &'ll Value, else_val: &'ll Value, ) -> &'ll Value
fn va_arg(&mut self, list: &'ll Value, ty: &'ll Type) -> &'ll Value
fn extract_element(&mut self, vec: &'ll Value, idx: &'ll Value) -> &'ll Value
fn vector_splat(&mut self, num_elts: usize, elt: &'ll Value) -> &'ll Value
fn extract_value(&mut self, agg_val: &'ll Value, idx: u64) -> &'ll Value
fn insert_value( &mut self, agg_val: &'ll Value, elt: &'ll Value, idx: u64, ) -> &'ll Value
fn set_personality_fn(&mut self, personality: &'ll Value)
fn cleanup_landing_pad( &mut self, pers_fn: &'ll Value, ) -> (&'ll Value, &'ll Value)
fn filter_landing_pad( &mut self, pers_fn: &'ll Value, ) -> (&'ll Value, &'ll Value)
fn resume(&mut self, exn0: &'ll Value, exn1: &'ll Value)
fn cleanup_pad( &mut self, parent: Option<&'ll Value>, args: &[&'ll Value], ) -> Funclet<'ll>
fn cleanup_ret( &mut self, funclet: &Funclet<'ll>, unwind: Option<&'ll BasicBlock>, )
fn catch_pad(&mut self, parent: &'ll Value, args: &[&'ll Value]) -> Funclet<'ll>
fn catch_switch( &mut self, parent: Option<&'ll Value>, unwind: Option<&'ll BasicBlock>, handlers: &[&'ll BasicBlock], ) -> &'ll Value
fn atomic_cmpxchg( &mut self, dst: &'ll Value, cmp: &'ll Value, src: &'ll Value, order: AtomicOrdering, failure_order: AtomicOrdering, weak: bool, ) -> (&'ll Value, &'ll Value)
fn atomic_rmw( &mut self, op: AtomicRmwBinOp, dst: &'ll Value, src: &'ll Value, order: AtomicOrdering, ) -> &'ll Value
fn atomic_fence(&mut self, order: AtomicOrdering, scope: SynchronizationScope)
fn set_invariant_load(&mut self, load: &'ll Value)
Source§fn lifetime_start(&mut self, ptr: &'ll Value, size: Size)
fn lifetime_start(&mut self, ptr: &'ll Value, size: Size)
StorageLive
Source§fn lifetime_end(&mut self, ptr: &'ll Value, size: Size)
fn lifetime_end(&mut self, ptr: &'ll Value, size: Size)
StorageDead
fn call( &mut self, llty: &'ll Type, fn_attrs: Option<&CodegenFnAttrs>, fn_abi: Option<&FnAbi<'tcx, Ty<'tcx>>>, llfn: &'ll Value, args: &[&'ll Value], funclet: Option<&Funclet<'ll>>, instance: Option<Instance<'tcx>>, ) -> &'ll Value
fn zext(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value
fn apply_attrs_to_cleanup_callsite(&mut self, llret: &'ll Value)
fn cond_br_with_expect( &mut self, cond: Self::Value, then_llbb: Self::BasicBlock, else_llbb: Self::BasicBlock, expect: Option<bool>, )
fn to_immediate( &mut self, val: Self::Value, layout: TyAndLayout<'_, Ty<'_>>, ) -> Self::Value
fn load_from_place( &mut self, ty: Self::Type, place: PlaceValue<Self::Value>, ) -> Self::Value
fn store_to_place( &mut self, val: Self::Value, place: PlaceValue<Self::Value>, ) -> Self::Value
fn store_to_place_with_flags( &mut self, val: Self::Value, place: PlaceValue<Self::Value>, flags: MemFlags, ) -> Self::Value
fn ptradd(&mut self, ptr: Self::Value, offset: Self::Value) -> Self::Value
fn inbounds_ptradd( &mut self, ptr: Self::Value, offset: Self::Value, ) -> Self::Value
fn cast_float_to_int( &mut self, signed: bool, x: Self::Value, dest_ty: Self::Type, ) -> Self::Value
Source§fn typed_place_copy(
&mut self,
dst: PlaceValue<Self::Value>,
src: PlaceValue<Self::Value>,
layout: TyAndLayout<'tcx, Ty<'tcx>>,
)
fn typed_place_copy( &mut self, dst: PlaceValue<Self::Value>, src: PlaceValue<Self::Value>, layout: TyAndLayout<'tcx, Ty<'tcx>>, )
fn typed_place_copy_with_flags( &mut self, dst: PlaceValue<Self::Value>, src: PlaceValue<Self::Value>, layout: TyAndLayout<'tcx, Ty<'tcx>>, flags: MemFlags, )
Source§fn typed_place_swap(
&mut self,
left: PlaceValue<Self::Value>,
right: PlaceValue<Self::Value>,
layout: TyAndLayout<'tcx, Ty<'tcx>>,
)
fn typed_place_swap( &mut self, left: PlaceValue<Self::Value>, right: PlaceValue<Self::Value>, layout: TyAndLayout<'tcx, Ty<'tcx>>, )
Source§impl<'tcx> CoverageInfoBuilderMethods<'tcx> for Builder<'_, '_, 'tcx>
impl<'tcx> CoverageInfoBuilderMethods<'tcx> for Builder<'_, '_, 'tcx>
Source§fn init_coverage(&mut self, instance: Instance<'tcx>)
fn init_coverage(&mut self, instance: Instance<'tcx>)
Source§fn add_coverage(&mut self, instance: Instance<'tcx>, kind: &CoverageKind)
fn add_coverage(&mut self, instance: Instance<'tcx>, kind: &CoverageKind)
Source§impl<'ll> DebugInfoBuilderMethods for Builder<'_, 'll, '_>
impl<'ll> DebugInfoBuilderMethods for Builder<'_, 'll, '_>
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>>, )
fn set_dbg_loc(&mut self, dbg_loc: &'ll DILocation)
fn clear_dbg_loc(&mut self)
fn get_dbg_loc(&self) -> Option<&'ll DILocation>
fn insert_reference_to_gdb_debug_scripts_section_global(&mut self)
fn set_var_name(&mut self, value: &'ll Value, name: &str)
Source§impl<'tcx> FnAbiOfHelpers<'tcx> for Builder<'_, '_, 'tcx>
impl<'tcx> FnAbiOfHelpers<'tcx> for Builder<'_, '_, 'tcx>
Source§fn handle_fn_abi_err(
&self,
err: FnAbiError<'tcx>,
span: Span,
fn_abi_request: FnAbiRequest<'tcx>,
) -> !
fn handle_fn_abi_err( &self, err: FnAbiError<'tcx>, span: Span, fn_abi_request: FnAbiRequest<'tcx>, ) -> !
fn_abi_of_*
, to adapt tcx.fn_abi_of_*(...)
into a
Self::FnAbiOfResult
(which does not need to be a Result<...>
). Read moreSource§type FnAbiOfResult = &'tcx FnAbi<'tcx, Ty<'tcx>>
type FnAbiOfResult = &'tcx FnAbi<'tcx, Ty<'tcx>>
&FnAbi
-wrapping type (or &FnAbi
itself), which will be
returned from fn_abi_of_*
(see also handle_fn_abi_err
).Source§impl HasDataLayout for Builder<'_, '_, '_>
impl HasDataLayout for Builder<'_, '_, '_>
fn data_layout(&self) -> &TargetDataLayout
Source§impl HasTargetSpec for Builder<'_, '_, '_>
impl HasTargetSpec for Builder<'_, '_, '_>
fn target_spec(&self) -> &Target
Source§impl<'tcx> HasTypingEnv<'tcx> for Builder<'_, '_, 'tcx>
impl<'tcx> HasTypingEnv<'tcx> for Builder<'_, '_, 'tcx>
Source§impl<'ll, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx>
impl<'ll, 'tcx> IntrinsicCallBuilderMethods<'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,
) -> Result<(), Instance<'tcx>>
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, ) -> Result<(), Instance<'tcx>>
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
.
Returns Err
if another instance should be called instead. This is used to invoke
intrinsic default bodies in case an intrinsic is not implemented by the backend.fn abort(&mut self)
fn assume(&mut self, val: Self::Value)
fn expect(&mut self, cond: Self::Value, expected: bool) -> Self::Value
Source§fn type_test(
&mut self,
pointer: Self::Value,
typeid: Self::Metadata,
) -> Self::Value
fn type_test( &mut self, pointer: Self::Value, typeid: Self::Metadata, ) -> Self::Value
Source§fn type_checked_load(
&mut self,
llvtable: &'ll Value,
vtable_byte_offset: u64,
typeid: &'ll Metadata,
) -> Self::Value
fn type_checked_load( &mut self, llvtable: &'ll Value, vtable_byte_offset: u64, typeid: &'ll Metadata, ) -> Self::Value
Source§impl<'tcx> LayoutOfHelpers<'tcx> for Builder<'_, '_, 'tcx>
impl<'tcx> LayoutOfHelpers<'tcx> for Builder<'_, '_, 'tcx>
Source§fn handle_layout_err(
&self,
err: LayoutError<'tcx>,
span: Span,
ty: Ty<'tcx>,
) -> !
fn handle_layout_err( &self, err: LayoutError<'tcx>, span: Span, ty: Ty<'tcx>, ) -> !
layout_of
, to adapt tcx.layout_of(...)
into a
Self::LayoutOfResult
(which does not need to be a Result<...>
). Read moreSource§type LayoutOfResult = TyAndLayout<'tcx, Ty<'tcx>>
type LayoutOfResult = TyAndLayout<'tcx, Ty<'tcx>>
TyAndLayout
-wrapping type (or TyAndLayout
itself), which will be
returned from layout_of
(see also handle_layout_err
).Source§fn layout_tcx_at_span(&self) -> Span
fn layout_tcx_at_span(&self) -> Span
Span
to use for tcx.at(span)
, from layout_of
.Source§impl<'ll> StaticBuilderMethods for Builder<'_, 'll, '_>
impl<'ll> StaticBuilderMethods for Builder<'_, 'll, '_>
fn get_static(&mut self, def_id: DefId) -> &'ll Value
Auto Trait Implementations§
impl<'a, 'll, 'tcx> !DynSend for Builder<'a, 'll, 'tcx>
impl<'a, 'll, 'tcx> !DynSync for Builder<'a, 'll, 'tcx>
impl<'a, 'll, 'tcx> Freeze for Builder<'a, 'll, 'tcx>
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>
impl<'a, 'll, 'tcx> !UnwindSafe for Builder<'a, 'll, 'tcx>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
Source§impl<'tcx, C> FnAbiOf<'tcx> for Cwhere
C: FnAbiOfHelpers<'tcx>,
impl<'tcx, C> FnAbiOf<'tcx> for Cwhere
C: FnAbiOfHelpers<'tcx>,
Source§fn fn_abi_of_fn_ptr(
&self,
sig: Binder<TyCtxt<'tcx>, FnSig<TyCtxt<'tcx>>>,
extra_args: &'tcx RawList<(), Ty<'tcx>>,
) -> Self::FnAbiOfResult
fn fn_abi_of_fn_ptr( &self, sig: Binder<TyCtxt<'tcx>, FnSig<TyCtxt<'tcx>>>, extra_args: &'tcx RawList<(), Ty<'tcx>>, ) -> Self::FnAbiOfResult
Source§fn fn_abi_of_instance(
&self,
instance: Instance<'tcx>,
extra_args: &'tcx RawList<(), Ty<'tcx>>,
) -> Self::FnAbiOfResult
fn fn_abi_of_instance( &self, instance: Instance<'tcx>, extra_args: &'tcx RawList<(), Ty<'tcx>>, ) -> Self::FnAbiOfResult
FnAbi
suitable for declaring/defining an fn
instance, and for
direct calls to an fn
. Read moreSource§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
Source§impl<'tcx, C> LayoutOf<'tcx> for Cwhere
C: LayoutOfHelpers<'tcx>,
impl<'tcx, C> LayoutOf<'tcx> for Cwhere
C: LayoutOfHelpers<'tcx>,
Source§fn layout_of(&self, ty: Ty<'tcx>) -> Self::LayoutOfResult
fn layout_of(&self, ty: Ty<'tcx>) -> Self::LayoutOfResult
Source§fn spanned_layout_of(&self, ty: Ty<'tcx>, span: Span) -> Self::LayoutOfResult
fn spanned_layout_of(&self, ty: Ty<'tcx>, span: Span) -> Self::LayoutOfResult
span
. Note that this implicitly
executes in “reveal all” mode, and will normalize the input type.Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PointerArithmetic for Twhere
T: HasDataLayout,
impl<T> PointerArithmetic for Twhere
T: HasDataLayout,
fn pointer_size(&self) -> Size
fn max_size_of_val(&self) -> Size
fn target_usize_max(&self) -> u64
fn target_isize_min(&self) -> i64
fn target_isize_max(&self) -> i64
fn truncate_to_target_usize(&self, val: u64) -> u64
fn sign_extend_to_target_isize(&self, val: u64) -> i64
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
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