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>

source

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.

source

pub fn store<Bx: BuilderMethods<'a, 'tcx, Value = V>>( self, bx: &mut Bx, dest: PlaceRef<'tcx, V> )

source

pub fn volatile_store<Bx: BuilderMethods<'a, 'tcx, Value = V>>( self, bx: &mut Bx, dest: PlaceRef<'tcx, V> )

source

pub fn unaligned_volatile_store<Bx: BuilderMethods<'a, 'tcx, Value = V>>( self, bx: &mut Bx, dest: PlaceRef<'tcx, V> )

source

pub fn nontemporal_store<Bx: BuilderMethods<'a, 'tcx, Value = V>>( self, bx: &mut Bx, dest: PlaceRef<'tcx, V> )

source

fn store_with_flags<Bx: BuilderMethods<'a, 'tcx, Value = V>>( self, bx: &mut Bx, dest: PlaceRef<'tcx, V>, flags: MemFlags )

source

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>

source§

fn clone(&self) -> OperandValue<V>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<V: Debug> Debug for OperandValue<V>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<V: Copy> Copy for OperandValue<V>

Auto Trait Implementations§

§

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<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,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

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

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> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

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

§

type Error = Infallible

The type returned in the event of a conversion error.
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.
source§

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

Performs the conversion.

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.