Trait rustc_mir_dataflow::framework::GenKillAnalysis [−][src]
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>
) { ... }
}
Expand description
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
Required methods
See Analysis::apply_statement_effect
.
fn terminator_effect(
&self,
trans: &mut impl GenKill<Self::Idx>,
terminator: &Terminator<'tcx>,
location: Location
)
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>
)
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
.
Provided methods
See Analysis::apply_before_statement_effect
.
fn before_terminator_effect(
&self,
_trans: &mut impl GenKill<Self::Idx>,
_terminator: &Terminator<'tcx>,
_location: Location
)
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>
)
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>
)
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
.