The dataflow analysis that computes the set of references that LLZK operations use and produce.
More...
|
| mlir::LogicalResult | visitOperation (mlir::Operation *op, mlir::ArrayRef< const Lattice * > operands, mlir::ArrayRef< Lattice * > results) override |
| | Propagate SourceRef lattice values through an operation.
|
| void | visitExternalCall (mlir::CallOpInterface call, mlir::ArrayRef< const Lattice * > argumentLattices, mlir::ArrayRef< Lattice * > resultLattices) override |
| | Propagate references across a call treated as external.
|
| | SparseForwardDataFlowAnalysis (mlir::DataFlowSolver &s) |
| | SparseForwardDataFlowAnalysis (mlir::DataFlowSolver &s) |
| virtual void | visitNonControlFlowArguments (mlir::Operation *, const mlir::RegionSuccessor &successor, mlir::ArrayRef< SourceRefLattice * > argLattices, unsigned firstIndex) |
| | Given an operation with possible region control-flow, the lattices of the operands, and a region successor, compute the lattice values for block arguments that are not accounted for by the branching control flow (ex.
|
| mlir::LogicalResult | initialize (mlir::Operation *top) override |
| | Initialize the analysis while preserving the program-order visitation of the old LLZK sparse analysis port.
|
| mlir::LogicalResult | visit (mlir::ProgramPoint *point) override |
| | Delegate block starts and result-producing operations to upstream MLIR.
|
The dataflow analysis that computes the set of references that LLZK operations use and produce.
The analysis is simple: any operation will simply output a union of its input references, regardless of what type of operation it performs, as the analysis is operator-insensitive.
Definition at line 36 of file ConstraintDependencyGraph.h.
| void llzk::SourceRefAnalysis::visitExternalCall |
( |
mlir::CallOpInterface | call, |
|
|
mlir::ArrayRef< const Lattice * > | argumentLattices, |
|
|
mlir::ArrayRef< Lattice * > | resultLattices ) |
|
overridevirtual |
Propagate references across a call treated as external.
For a call with no definition, assigns each result a fresh root reference. For a defined callable, translates reference states returned by the callee into the caller's context using the argument lattice states. This is also used when interprocedural analysis deliberately treats a defined call as external.
- Parameters
-
| call | The call operation being analyzed. |
| argumentLattices | The current lattice states of call's arguments, in argument order. |
| resultLattices | The lattice states to update for call's results, in result order. |
Reimplemented from llzk::dataflow::SparseForwardDataFlowAnalysis< SourceRefLattice >.
Definition at line 220 of file ConstraintDependencyGraph.cpp.
| LogicalResult llzk::SourceRefAnalysis::visitOperation |
( |
mlir::Operation * | op, |
|
|
mlir::ArrayRef< const Lattice * > | operands, |
|
|
mlir::ArrayRef< Lattice * > | results ) |
|
overridevirtual |
Propagate SourceRef lattice values through an operation.
Applies operation-specific reference propagation for aggregate accesses and constructions. For all other operations, each result receives the union of its operands' references, along with any root reference required for that result.
- Parameters
-
| op | The operation whose results are being analyzed. |
| operands | The current lattice states of op's operands, in operand order. |
| results | The lattice states to update for op's results, in result order. |
Implements llzk::dataflow::SparseForwardDataFlowAnalysis< SourceRefLattice >.
Definition at line 139 of file ConstraintDependencyGraph.cpp.