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 Pair
s. 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.