Expand description
A framework that can express both gen-kill and generic dataflow problems.
To use this framework, implement the Analysis trait. There used to be a GenKillAnalysis
alternative trait for gen-kill analyses that would pre-compute the transfer function for each
block. It was intended as an optimization, but it ended up not being any faster than
Analysis.
The impls module contains several examples of dataflow analyses.
Then call iterate_to_fixpoint on your type that impls Analysis to get a Results. From
there, you can use a ResultsCursor to inspect the fixpoint solution to your dataflow problem,
or implement the ResultsVisitor interface and use visit_results. The following example uses
the ResultsCursor approach.
โ
use rustc_const_eval::dataflow::Analysis; // Makes `iterate_to_fixpoint` available.
fn do_my_analysis(tcx: TyCtxt<'tcx>, body: &mir::Body<'tcx>) {
let analysis = MyAnalysis::new()
.iterate_to_fixpoint(tcx, body, None)
.into_results_cursor(body);
// Print the dataflow state *after* each statement in the start block.
for (_, statement_index) in body.block_data[START_BLOCK].statements.iter_enumerated() {
cursor.seek_after(Location { block: START_BLOCK, statement_index });
let state = cursor.get();
println!("{:?}", state);
}
}Re-exportsยง
pub use self::cursor::ResultsCursor;pub use self::direction::Backward;pub use self::direction::Direction;pub use self::direction::Forward;pub use self::lattice::JoinSemiLattice;pub use self::lattice::MaybeReachable;pub use self::results::Results;pub use self::visitor::ResultsVisitable;pub use self::visitor::ResultsVisitor;pub use self::visitor::visit_results;
Modulesยง
- cursor ๐Random access inspection of the results of a dataflow analysis.
- direction ๐
- Custom formatting traits used when outputting Graphviz diagrams with the results of a dataflow analysis.
- A helpful diagram for debugging dataflow problems.
- Traits used to represent lattices for use as the domain of a dataflow analysis.
- results ๐Dataflow analysis results.
- visitor ๐
Structsยง
Enumsยง
- Effect ๐
Traitsยง
- A dataflow problem with an arbitrarily complex transfer function.
- Analysis domains are all bitsets of various kinds. This trait holds operations needed by all of them.
- The legal operations for a transfer function in a gen/kill problem.
- A type that records the edge-specific effects for a
SwitchIntterminator.