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

This example is not tested
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 SwitchInt terminator.