[−][src]Trait rustc_mir::dataflow::framework::GenKillAnalysis

pub trait GenKillAnalysis<'tcx>: Analysis<'tcx> {
    fn statement_effect(
        &self,
        trans: &mut impl GenKill<Self::Idx>,
        statement: &Statement<'tcx>,
        location: Location
    );
fn terminator_effect(
        &self,
        trans: &mut impl GenKill<Self::Idx>,
        terminator: &Terminator<'tcx>,
        location: Location
    );
fn call_return_effect(
        &self,
        trans: &mut impl GenKill<Self::Idx>,
        block: BasicBlock,
        func: &Operand<'tcx>,
        args: &[Operand<'tcx>],
        return_place: Place<'tcx>
    ); fn before_statement_effect(
        &self,
        _trans: &mut impl GenKill<Self::Idx>,
        _statement: &Statement<'tcx>,
        _location: Location
    ) { ... }
fn before_terminator_effect(
        &self,
        _trans: &mut impl GenKill<Self::Idx>,
        _terminator: &Terminator<'tcx>,
        _location: Location
    ) { ... }
fn yield_resume_effect(
        &self,
        _trans: &mut impl GenKill<Self::Idx>,
        _resume_block: BasicBlock,
        _resume_place: Place<'tcx>
    ) { ... }
fn discriminant_switch_effect(
        &self,
        _state: &mut impl GenKill<Self::Idx>,
        _block: BasicBlock,
        _enum_place: Place<'tcx>,
        _adt: &AdtDef,
        _variant: VariantIdx
    ) { ... } }

A gen/kill dataflow problem.

Each method in this trait has a corresponding one in Analysis. However, these methods only allow modification of the dataflow state via "gen" and "kill" operations. By defining transfer functions for each statement in this way, the transfer function for an entire basic block can be computed efficiently.

Analysis is automatically implemented for all implementers of GenKillAnalysis.

Required methods

fn statement_effect(
    &self,
    trans: &mut impl GenKill<Self::Idx>,
    statement: &Statement<'tcx>,
    location: Location
)

See Analysis::apply_statement_effect.

fn terminator_effect(
    &self,
    trans: &mut impl GenKill<Self::Idx>,
    terminator: &Terminator<'tcx>,
    location: Location
)

See Analysis::apply_terminator_effect.

fn call_return_effect(
    &self,
    trans: &mut impl GenKill<Self::Idx>,
    block: BasicBlock,
    func: &Operand<'tcx>,
    args: &[Operand<'tcx>],
    return_place: Place<'tcx>
)

See Analysis::apply_call_return_effect.

Loading content...

Provided methods

fn before_statement_effect(
    &self,
    _trans: &mut impl GenKill<Self::Idx>,
    _statement: &Statement<'tcx>,
    _location: Location
)

See Analysis::apply_before_statement_effect.

fn before_terminator_effect(
    &self,
    _trans: &mut impl GenKill<Self::Idx>,
    _terminator: &Terminator<'tcx>,
    _location: Location
)

See Analysis::apply_before_terminator_effect.

fn yield_resume_effect(
    &self,
    _trans: &mut impl GenKill<Self::Idx>,
    _resume_block: BasicBlock,
    _resume_place: Place<'tcx>
)

See Analysis::apply_yield_resume_effect.

fn discriminant_switch_effect(
    &self,
    _state: &mut impl GenKill<Self::Idx>,
    _block: BasicBlock,
    _enum_place: Place<'tcx>,
    _adt: &AdtDef,
    _variant: VariantIdx
)

See Analysis::apply_discriminant_switch_effect.

Loading content...

Implementors

impl<'mir, 'tcx> GenKillAnalysis<'tcx> for MaybeRequiresStorage<'mir, 'tcx>[src]

impl<'tcx> GenKillAnalysis<'tcx> for MaybeInitializedLocals[src]

fn yield_resume_effect(
    &self,
    trans: &mut impl GenKill<Self::Idx>,
    _resume_block: BasicBlock,
    resume_place: Place<'tcx>
)
[src]

See Analysis::apply_yield_resume_effect.

impl<'tcx> GenKillAnalysis<'tcx> for MaybeLiveLocals[src]

impl<'tcx> GenKillAnalysis<'tcx> for MaybeStorageLive[src]

impl<'tcx, '_> GenKillAnalysis<'tcx> for Borrows<'_, 'tcx>[src]

impl<'tcx, '_> GenKillAnalysis<'tcx> for DefinitelyInitializedPlaces<'_, 'tcx>[src]

impl<'tcx, '_> GenKillAnalysis<'tcx> for EverInitializedPlaces<'_, 'tcx>[src]

impl<'tcx, '_> GenKillAnalysis<'tcx> for MaybeInitializedPlaces<'_, 'tcx>[src]

impl<'tcx, '_> GenKillAnalysis<'tcx> for MaybeUninitializedPlaces<'_, 'tcx>[src]

impl<K, 'tcx> GenKillAnalysis<'tcx> for MaybeBorrowedLocals<K> where
    K: BorrowAnalysisKind<'tcx>, 
[src]

Loading content...