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

pub trait GenKillAnalysis<'tcx>: Analysis<'tcx> {
    type Idx: Idx;
    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 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

Loading content...

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 switch_int_edge_effects<G: GenKill<Self::Idx>>(
    &self,
    _block: BasicBlock,
    _discr: &Operand<'tcx>,
    _edge_effects: &mut impl SwitchIntEdgeEffects<G>
)

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

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