[−][src]Module rustc_mir::dataflow::framework
A framework that can express both gen-kill and generic dataflow problems.
To actually use this framework, you must implement either the Analysis or the
GenKillAnalysis trait. If your transfer function can be expressed with only gen/kill
operations, prefer GenKillAnalysis since it will run faster while iterating to fixpoint. The
impls module contains several examples of gen/kill dataflow analyses.
Create an Engine for your analysis using the into_engine method on the Analysis trait,
then call iterate_to_fixpoint. 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_mir::dataflow::Analysis; // Makes `into_engine` available. fn do_my_analysis(tcx: TyCtxt<'tcx>, body: &mir::Body<'tcx>) { let analysis = MyAnalysis::new() .into_engine(tcx, body) .iterate_to_fixpoint() .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::cursor::ResultsRefCursor; |
pub use self::direction::Backward; |
pub use self::direction::Direction; |
pub use self::direction::Forward; |
pub use self::engine::Engine; |
pub use self::engine::Results; |
pub use self::lattice::JoinSemiLattice; |
pub use self::lattice::MeetSemiLattice; |
pub use self::visitor::visit_results; |
pub use self::visitor::ResultsVisitor; |
pub use self::visitor::BorrowckFlowState; |
pub use self::visitor::BorrowckResults; |
Modules
| cursor | Random access inspection of the results of a dataflow analysis. |
| direction | |
| engine | A solver for dataflow problems. |
| fmt | Custom formatting traits used when outputting Graphviz diagrams with the results of a dataflow analysis. |
| graphviz | A helpful diagram for debugging dataflow problems. |
| lattice | Traits used to represent lattices for use as the domain of a dataflow analysis. |
| visitor |
Structs
| EffectIndex | |
| GenKillSet | Stores a transfer function for a gen/kill problem. |
| SwitchIntTarget |
Enums
| Effect |
Traits
| Analysis | A dataflow problem with an arbitrarily complex transfer function. |
| AnalysisDomain | Define the domain of a dataflow problem. |
| GenKill | The legal operations for a transfer function in a gen/kill problem. |
| GenKillAnalysis | A gen/kill dataflow problem. |
| SwitchIntEdgeEffects | A type that records the edge-specific effects for a |