Struct rustc_mir_transform::large_enums::EnumSizeOpt
source · pub 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: u64
Implementations§
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>)
fn name(&self) -> &'static str
fn profiler_name(&self) -> &'static str
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
§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<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
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