|
MLIR 23.0.0git
|
A sparse forward data-flow analysis for propagating SSA value lattices across the IR by implementing transfer functions for operations. More...
#include "mlir/Analysis/DataFlow/SparseAnalysis.h"
Public Member Functions | |
| SparseForwardDataFlowAnalysis (DataFlowSolver &solver) | |
| virtual LogicalResult | visitOperation (Operation *op, ArrayRef< const StateT * > operands, ArrayRef< StateT * > results)=0 |
| Visit an operation with the lattices of its operands. | |
| virtual void | visitExternalCall (CallOpInterface call, ArrayRef< const StateT * > argumentLattices, ArrayRef< StateT * > resultLattices) |
| Visit a call operation to an externally defined function given the lattices of its arguments. | |
| virtual void | visitNonControlFlowArguments (Operation *op, const RegionSuccessor &successor, ValueRange nonSuccessorInputs, ArrayRef< StateT * > nonSuccessorInputLattices) |
| Given an operation with possible region control-flow, the lattices of the operands, and a region successor, compute the lattice values for non-successor-inputs (ex. | |
| Public Member Functions inherited from mlir::dataflow::AbstractSparseForwardDataFlowAnalysis | |
| LogicalResult | initialize (Operation *top) override |
| Initialize the analysis by visiting every owner of an SSA value: all operations and blocks. | |
| LogicalResult | visit (ProgramPoint *point) override |
| Visit a program point. | |
| Public Member Functions inherited from mlir::DataFlowAnalysis | |
| virtual | ~DataFlowAnalysis () |
| DataFlowAnalysis (DataFlowSolver &solver) | |
| Create an analysis with a reference to the parent solver. | |
| virtual void | initializeEquivalentLatticeAnchor (Operation *top) |
| Initialize lattice anchor equivalence class from the provided top-level operation. | |
Protected Member Functions | |
| StateT * | getLatticeElement (Value value) override |
| Get the lattice element for a value. | |
| const StateT * | getLatticeElementFor (ProgramPoint *point, Value value) |
| Get the lattice element for a value and create a dependency on the provided program point. | |
| virtual void | setToEntryState (StateT *lattice)=0 |
| Set the given lattice element(s) at control flow entry point(s). | |
| void | setAllToEntryStates (ArrayRef< StateT * > lattices) |
| Protected Member Functions inherited from mlir::dataflow::AbstractSparseForwardDataFlowAnalysis | |
| AbstractSparseForwardDataFlowAnalysis (DataFlowSolver &solver) | |
| const AbstractSparseLattice * | getLatticeElementFor (ProgramPoint *point, Value value) |
| Get a read-only lattice element for a value and add it as a dependency to a program point. | |
| void | setAllToEntryStates (ArrayRef< AbstractSparseLattice * > lattices) |
| void | join (AbstractSparseLattice *lhs, const AbstractSparseLattice &rhs) |
| Join the lattice element and propagate and update if it changed. | |
| virtual LogicalResult | visitCallOperation (CallOpInterface call, ArrayRef< const AbstractSparseLattice * > operandLattices, ArrayRef< AbstractSparseLattice * > resultLattices) |
| Visits a call operation. | |
| virtual void | visitCallableOperation (CallableOpInterface callable, ArrayRef< AbstractSparseLattice * > argLattices) |
| Visits a callable operation. | |
| Protected Member Functions inherited from mlir::DataFlowAnalysis | |
| void | addDependency (AnalysisState *state, ProgramPoint *point) |
| Create a dependency between the given analysis state and lattice anchor on this analysis. | |
| void | propagateIfChanged (AnalysisState *state, ChangeResult changed) |
| Propagate an update to a state if it changed. | |
| template<typename AnchorT> | |
| void | registerAnchorKind () |
| Register a custom lattice anchor class. | |
| template<typename AnchorT, typename... Args> | |
| AnchorT * | getLatticeAnchor (Args &&...args) |
| Get or create a custom lattice anchor. | |
| template<typename StateT, typename AnchorT> | |
| void | unionLatticeAnchors (AnchorT anchor, AnchorT other) |
| Union input anchors under the given state. | |
| template<typename StateT, typename AnchorT> | |
| StateT * | getOrCreate (AnchorT anchor) |
| Get the analysis state associated with the lattice anchor. | |
| template<typename StateT, typename AnchorT> | |
| const StateT * | getOrCreateFor (ProgramPoint *dependent, AnchorT anchor) |
| Get a read-only analysis state for the given point and create a dependency on dependent. | |
| ProgramPoint * | getProgramPointBefore (Operation *op) |
| Get a uniqued program point instance. | |
| ProgramPoint * | getProgramPointBefore (Block *block) |
| ProgramPoint * | getProgramPointAfter (Operation *op) |
| ProgramPoint * | getProgramPointAfter (Block *block) |
| const DataFlowConfig & | getSolverConfig () const |
| Return the configuration of the solver used for this analysis. | |
A sparse forward data-flow analysis for propagating SSA value lattices across the IR by implementing transfer functions for operations.
StateT is expected to be a subclass of AbstractSparseLattice.
Definition at line 300 of file SparseAnalysis.h.
|
inlineexplicit |
Definition at line 307 of file SparseAnalysis.h.
References mlir::dataflow::AbstractSparseForwardDataFlowAnalysis::AbstractSparseForwardDataFlowAnalysis(), and mlir::DataFlowAnalysis::DataFlowSolver.
|
inlineoverrideprotectedvirtual |
Get the lattice element for a value.
Implements mlir::dataflow::AbstractSparseForwardDataFlowAnalysis.
Definition at line 340 of file SparseAnalysis.h.
References mlir::DataFlowAnalysis::getOrCreate().
|
inlineprotected |
Get the lattice element for a value and create a dependency on the provided program point.
Definition at line 346 of file SparseAnalysis.h.
References mlir::dataflow::AbstractSparseForwardDataFlowAnalysis::getLatticeElementFor().
|
inlineprotected |
Definition at line 354 of file SparseAnalysis.h.
References mlir::dataflow::AbstractSparseForwardDataFlowAnalysis::setAllToEntryStates().
Referenced by visitExternalCall(), and visitNonControlFlowArguments().
|
protectedpure virtual |
Set the given lattice element(s) at control flow entry point(s).
Implemented in mlir::dataflow::IntegerRangeAnalysis, mlir::dataflow::SparseConstantPropagation, and mlir::dataflow::StridedMetadataRangeAnalysis.
|
inlinevirtual |
Visit a call operation to an externally defined function given the lattices of its arguments.
Definition at line 318 of file SparseAnalysis.h.
References setAllToEntryStates().
|
inlinevirtual |
Given an operation with possible region control-flow, the lattices of the operands, and a region successor, compute the lattice values for non-successor-inputs (ex.
loop induction variables) of a given region successor. By default, this method marks all lattice elements as having reached a pessimistic fixpoint.
Reimplemented in mlir::dataflow::IntegerRangeAnalysis.
Definition at line 330 of file SparseAnalysis.h.
References setAllToEntryStates().
Referenced by mlir::dataflow::IntegerRangeAnalysis::visitNonControlFlowArguments().
|
pure virtual |
Visit an operation with the lattices of its operands.
This function is expected to set the lattices of the operation's results.
Implemented in mlir::dataflow::IntegerRangeAnalysis, mlir::dataflow::SparseConstantPropagation, and mlir::dataflow::StridedMetadataRangeAnalysis.