MLIR 22.0.0git
mlir::AnalysisState Class Referenceabstract

Base class for generic analysis states. More...

#include "mlir/Analysis/DataFlowFramework.h"

Inheritance diagram for mlir::AnalysisState:

Public Member Functions

virtual ~AnalysisState ()
 AnalysisState (LatticeAnchor anchor)
 Create the analysis state on the given lattice anchor.
LatticeAnchor getAnchor () const
 Returns the lattice anchor this state is located at.
virtual void print (raw_ostream &os) const =0
 Print the contents of the analysis state.
LLVM_DUMP_METHOD void dump () const
void addDependency (ProgramPoint *point, DataFlowAnalysis *analysis)
 Add a dependency to this analysis state on a lattice anchor and an analysis.

Protected Member Functions

virtual void onUpdate (DataFlowSolver *solver) const
 This function is called by the solver when the analysis state is updated to enqueue more work items.

Protected Attributes

LatticeAnchor anchor
 The lattice anchor to which the state belongs.

Friends

class DataFlowSolver
 Allow the framework to access the dependents.

Detailed Description

Base class for generic analysis states.

Analysis states contain data-flow information that are attached to lattice anchors and which evolve as the analysis iterates.

This class places no restrictions on the semantics of analysis states beyond these requirements.

  1. Querying the state of a lattice anchor prior to visiting that anchor results in uninitialized state. Analyses must be aware of unintialized states.
  2. Analysis states can reach fixpoints, where subsequent updates will never trigger a change in the state.
  3. Analysis states that are uninitialized can be forcefully initialized to a default value.

Definition at line 488 of file DataFlowFramework.h.

Constructor & Destructor Documentation

◆ ~AnalysisState()

AnalysisState::~AnalysisState ( )
virtualdefault

◆ AnalysisState()

AnalysisState::AnalysisState ( LatticeAnchor anchor)
inline

Member Function Documentation

◆ addDependency()

void AnalysisState::addDependency ( ProgramPoint * point,
DataFlowAnalysis * analysis )

Add a dependency to this analysis state on a lattice anchor and an analysis.

If this state is updated, the analysis will be invoked on the given lattice anchor again (in onUpdate()).

Definition at line 42 of file DataFlowFramework.cpp.

References anchor, DATAFLOW_DEBUG, and inserted().

Referenced by mlir::DataFlowAnalysis::addDependency().

◆ dump()

void AnalysisState::dump ( ) const

Definition at line 54 of file DataFlowFramework.cpp.

References print().

◆ getAnchor()

LatticeAnchor mlir::AnalysisState::getAnchor ( ) const
inline

Returns the lattice anchor this state is located at.

Definition at line 496 of file DataFlowFramework.h.

References anchor.

Referenced by mlir::dataflow::AbstractSparseLattice::getAnchor().

◆ onUpdate()

virtual void mlir::AnalysisState::onUpdate ( DataFlowSolver * solver) const
inlineprotectedvirtual

This function is called by the solver when the analysis state is updated to enqueue more work items.

For example, if a state tracks dependents through the IR (e.g. use-def chains), this function can be implemented to push those dependents on the worklist.

Reimplemented in mlir::dataflow::AbstractSparseLattice, mlir::dataflow::Executable, and mlir::dataflow::IntegerValueRangeLattice.

Definition at line 512 of file DataFlowFramework.h.

References DataFlowSolver, and mlir::DataFlowSolver::enqueue().

Referenced by mlir::dataflow::AbstractSparseLattice::onUpdate(), mlir::dataflow::Executable::onUpdate(), and mlir::DataFlowSolver::propagateIfChanged().

◆ print()

virtual void mlir::AnalysisState::print ( raw_ostream & os) const
pure virtual

◆ DataFlowSolver

Member Data Documentation

◆ anchor


The documentation for this class was generated from the following files: