pub(crate) struct EnumSizeOpt {
    pub(crate) discrepancy: u64,
}Expand description
A pass that seeks to optimize unnecessary moves of large enum types, if there is a large enough discrepancy between them.
i.e. If there are two variants:
enum Example {
  Small,
  Large([u32; 1024]),
}Instead of emitting moves of the large variant, perform a memcpy instead. Based off of this HackMD.
In summary, what this does is at runtime determine which enum variant is active, and instead of copying all the bytes of the largest possible variant, copy only the bytes for the currently active variant.
Fields§
§discrepancy: u64Implementations§
Trait Implementations§
Source§impl<'tcx> MirPass<'tcx> for EnumSizeOpt
 
impl<'tcx> MirPass<'tcx> for EnumSizeOpt
Source§fn is_enabled(&self, sess: &Session) -> bool
 
fn is_enabled(&self, sess: &Session) -> bool
Returns 
true if this pass is enabled with the current combination of compiler flags.fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>)
Source§fn is_required(&self) -> bool
 
fn is_required(&self) -> bool
Returns 
true if this pass must be run (i.e. it is required for soundness).
For passes which are strictly optimizations, this should return false.
If this is false, #[optimize(none)] will disable the pass.fn name(&self) -> &'static str
fn profiler_name(&self) -> &'static str
Source§fn can_be_overridden(&self) -> bool
 
fn can_be_overridden(&self) -> bool
Returns 
true if this pass can be overridden by -Zenable-mir-passes. This should be
true for basically every pass other than those that are necessary for correctness.fn is_mir_dump_enabled(&self) -> bool
Auto Trait Implementations§
impl DynSend for EnumSizeOpt
impl DynSync for EnumSizeOpt
impl Freeze for EnumSizeOpt
impl RefUnwindSafe for EnumSizeOpt
impl Send for EnumSizeOpt
impl Sync for EnumSizeOpt
impl Unpin for EnumSizeOpt
impl UnwindSafe for EnumSizeOpt
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
Mutably borrows from an owned value. Read more
Source§impl<T, R> CollectAndApply<T, R> for T
 
impl<T, R> CollectAndApply<T, R> 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<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>
Converts 
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>
Converts 
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<T> MaybeResult<T> for T
 
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
 
impl<T> Pointable for T
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: 8 bytes