Enum rustc_codegen_ssa::mir::operand::OperandValue
source · pub enum OperandValue<V> {
Ref(V, Option<V>, Align),
Immediate(V),
Pair(V, V),
ZeroSized,
}Expand description
The representation of a Rust value. The enum variant is in fact uniquely determined by the value’s type, but is kept as a safety check.
Variants§
Ref(V, Option<V>, Align)
A reference to the actual operand. The data is guaranteed to be valid for the operand’s lifetime. The second value, if any, is the extra data (vtable or length) which indicates that it refers to an unsized rvalue.
An OperandValue has this variant for types which are neither
Immediate nor Pairs. The backend value in this variant must be a
pointer to the non-immediate backend type. That pointee type is the
one returned by LayoutTypeMethods::backend_type.
Immediate(V)
A single LLVM immediate value.
An OperandValue must be this variant for any type for which
LayoutTypeMethods::is_backend_immediate returns true.
The backend value in this variant must be the immediate backend type,
as returned by LayoutTypeMethods::immediate_backend_type.
Pair(V, V)
A pair of immediate LLVM values. Used by fat pointers too.
An OperandValue must be this variant for any type for which
LayoutTypeMethods::is_backend_scalar_pair returns true.
The backend values in this variant must be the immediate backend types,
as returned by LayoutTypeMethods::scalar_pair_element_backend_type
with immediate: true.
ZeroSized
A value taking no bytes, and which therefore needs no LLVM value at all.
If you ever need a V to pass to something, get a fresh poison value
from ConstMethods::const_poison.
An OperandValue must be this variant for any type for which
is_zst on its Layout returns true. Note however that
these values can still require alignment.
Implementations§
source§impl<'a, 'tcx, V: CodegenObject> OperandValue<V>
impl<'a, 'tcx, V: CodegenObject> OperandValue<V>
sourcepub fn poison<Bx: BuilderMethods<'a, 'tcx, Value = V>>(
bx: &mut Bx,
layout: TyAndLayout<'tcx>
) -> OperandValue<V>
pub fn poison<Bx: BuilderMethods<'a, 'tcx, Value = V>>( bx: &mut Bx, layout: TyAndLayout<'tcx> ) -> OperandValue<V>
Returns an OperandValue that’s generally UB to use in any way.
Depending on the layout, returns ZeroSized for ZSTs, an Immediate or
Pair containing poison value(s), or a Ref containing a poison pointer.
Supports sized types only.
pub fn store<Bx: BuilderMethods<'a, 'tcx, Value = V>>( self, bx: &mut Bx, dest: PlaceRef<'tcx, V> )
pub fn volatile_store<Bx: BuilderMethods<'a, 'tcx, Value = V>>( self, bx: &mut Bx, dest: PlaceRef<'tcx, V> )
pub fn unaligned_volatile_store<Bx: BuilderMethods<'a, 'tcx, Value = V>>( self, bx: &mut Bx, dest: PlaceRef<'tcx, V> )
pub fn nontemporal_store<Bx: BuilderMethods<'a, 'tcx, Value = V>>( self, bx: &mut Bx, dest: PlaceRef<'tcx, V> )
fn store_with_flags<Bx: BuilderMethods<'a, 'tcx, Value = V>>( self, bx: &mut Bx, dest: PlaceRef<'tcx, V>, flags: MemFlags )
pub fn store_unsized<Bx: BuilderMethods<'a, 'tcx, Value = V>>( self, bx: &mut Bx, indirect_dest: PlaceRef<'tcx, V> )
Trait Implementations§
source§impl<V: Clone> Clone for OperandValue<V>
impl<V: Clone> Clone for OperandValue<V>
source§fn clone(&self) -> OperandValue<V>
fn clone(&self) -> OperandValue<V>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl<V: Debug> Debug for OperandValue<V>
impl<V: Debug> Debug for OperandValue<V>
impl<V: Copy> Copy for OperandValue<V>
Auto Trait Implementations§
impl<V> DynSend for OperandValue<V>where
V: DynSend,
impl<V> DynSync for OperandValue<V>where
V: DynSync,
impl<V> Freeze for OperandValue<V>where
V: Freeze,
impl<V> RefUnwindSafe for OperandValue<V>where
V: RefUnwindSafe,
impl<V> Send for OperandValue<V>where
V: Send,
impl<V> Sync for OperandValue<V>where
V: Sync,
impl<V> Unpin for OperandValue<V>where
V: Unpin,
impl<V> UnwindSafe for OperandValue<V>where
V: UnwindSafe,
Blanket Implementations§
source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on<'a>(self, arena: &'a Arena<'tcx>) -> &'a mut T
fn allocate_from_iter<'a>( arena: &'a Arena<'tcx>, iter: impl IntoIterator<Item = T> ) -> &'a mut [T]
source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on<'a>(self, arena: &'a Arena<'tcx>) -> &'a mut T
fn allocate_from_iter<'a>( arena: &'a Arena<'tcx>, iter: impl IntoIterator<Item = T> ) -> &'a mut [T]
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
§impl<T> Filterable for T
impl<T> Filterable for T
source§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<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<'tcx, T> ToPredicate<'tcx, T> for T
impl<'tcx, T> ToPredicate<'tcx, T> for T
fn to_predicate(self, _tcx: TyCtxt<'tcx>) -> 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,
impl<T> MaybeSendSync for T
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.