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

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

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.

Associated Types

type Idx: Idx[src]

Loading content...

Required methods

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

See Analysis::apply_statement_effect.

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

See Analysis::apply_terminator_effect.

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

See Analysis::apply_call_return_effect.

Loading content...

Provided methods

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

See Analysis::apply_before_statement_effect.

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

See Analysis::apply_before_terminator_effect.

pub 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.

pub fn switch_int_edge_effects<G: GenKill<Self::Idx>>(
    &self,
    _block: BasicBlock,
    _discr: &Operand<'tcx>,
    _edge_effects: &mut impl SwitchIntEdgeEffects<G>
)
[src]

See Analysis::apply_switch_int_edge_effects.

Loading content...

Implementors

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

type Idx = Local

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

type Idx = Local

pub 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]

type Idx = Local

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

type Idx = Local

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

type Idx = BorrowIndex

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

type Idx = MovePathIndex

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

type Idx = InitIndex

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

type Idx = MovePathIndex

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

type Idx = MovePathIndex

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

type Idx = Local

Loading content...