|
MLIR
22.0.0git
|
#include "mlir/Dialect/Affine/Analysis/Utils.h"
Classes | |
| struct | Edge |
| struct | Node |
Public Member Functions | |
| MemRefDependenceGraph (Block &block) | |
| bool | init (bool fullAffineDependences=true) |
| const Node * | getNode (unsigned id) const |
| Node * | getNode (unsigned id) |
| bool | hasNode (unsigned id) const |
| const Node * | getForOpNode (AffineForOp forOp) const |
| Node * | getForOpNode (AffineForOp forOp) |
| unsigned | addNode (Operation *op) |
| void | removeNode (unsigned id) |
| bool | writesToLiveInOrEscapingMemrefs (unsigned id) const |
| bool | hasEdge (unsigned srcId, unsigned dstId, Value value=nullptr) const |
| void | addEdge (unsigned srcId, unsigned dstId, Value value) |
| void | removeEdge (unsigned srcId, unsigned dstId, Value value) |
| bool | hasDependencePath (unsigned srcId, unsigned dstId) const |
| unsigned | getIncomingMemRefAccesses (unsigned id, Value memref) const |
| unsigned | getOutEdgeCount (unsigned id, Value memref=nullptr) const |
| void | gatherDefiningNodes (unsigned id, DenseSet< unsigned > &definingNodes) const |
| Return all nodes which define SSA values used in node 'id'. More... | |
| Operation * | getFusedLoopNestInsertionPoint (unsigned srcId, unsigned dstId) const |
| void | updateEdges (unsigned srcId, unsigned dstId, const DenseSet< Value > &privateMemRefs, bool removeSrcId) |
| void | updateEdges (unsigned sibId, unsigned dstId) |
| void | addToNode (unsigned id, ArrayRef< Operation * > loads, ArrayRef< Operation * > stores, ArrayRef< Operation * > memrefLoads, ArrayRef< Operation * > memrefStores, ArrayRef< Operation * > memrefFrees) |
| void | clearNodeLoadAndStores (unsigned id) |
| void | forEachMemRefInputEdge (unsigned id, const std::function< void(Edge)> &callback) |
| void | forEachMemRefOutputEdge (unsigned id, const std::function< void(Edge)> &callback) |
| void | forEachMemRefEdge (ArrayRef< Edge > edges, const std::function< void(Edge)> &callback) |
| void | print (raw_ostream &os) const |
| void | dump () const |
Public Attributes | |
| DenseMap< unsigned, Node > | nodes |
| DenseMap< unsigned, SmallVector< Edge, 2 > > | inEdges |
| DenseMap< unsigned, SmallVector< Edge, 2 > > | outEdges |
| DenseMap< Value, unsigned > | memrefEdgeCount |
| unsigned | nextNodeId = 0 |
| Block & | block |
| The block for which this graph is created to perform fusion. More... | |
|
inline |
| void MemRefDependenceGraph::addEdge | ( | unsigned | srcId, |
| unsigned | dstId, | ||
| Value | value | ||
| ) |
Definition at line 532 of file Utils.cpp.
References mlir::Value::getType().
| unsigned MemRefDependenceGraph::addNode | ( | Operation * | op | ) |
Definition at line 467 of file Utils.cpp.
References mlir::affine::MemRefDependenceGraph::Node::id.
| void MemRefDependenceGraph::addToNode | ( | unsigned | id, |
| ArrayRef< Operation * > | loads, | ||
| ArrayRef< Operation * > | stores, | ||
| ArrayRef< Operation * > | memrefLoads, | ||
| ArrayRef< Operation * > | memrefStores, | ||
| ArrayRef< Operation * > | memrefFrees | ||
| ) |
Definition at line 784 of file Utils.cpp.
References mlir::affine::MemRefDependenceGraph::Node::loads, mlir::affine::MemRefDependenceGraph::Node::memrefFrees, mlir::affine::MemRefDependenceGraph::Node::memrefLoads, mlir::affine::MemRefDependenceGraph::Node::memrefStores, and mlir::affine::MemRefDependenceGraph::Node::stores.
| void MemRefDependenceGraph::clearNodeLoadAndStores | ( | unsigned | id | ) |
Definition at line 797 of file Utils.cpp.
References mlir::affine::MemRefDependenceGraph::Node::loads, and mlir::affine::MemRefDependenceGraph::Node::stores.
|
inline |
| void MemRefDependenceGraph::forEachMemRefInputEdge | ( | unsigned | id, |
| const std::function< void(Edge)> & | callback | ||
| ) |
| void MemRefDependenceGraph::forEachMemRefOutputEdge | ( | unsigned | id, |
| const std::function< void(Edge)> & | callback | ||
| ) |
| void MemRefDependenceGraph::gatherDefiningNodes | ( | unsigned | id, |
| DenseSet< unsigned > & | definingNodes | ||
| ) | const |
|
inline |
Definition at line 180 of file Utils.h.
References getForOpNode().
| const Node * MemRefDependenceGraph::getForOpNode | ( | AffineForOp | forOp | ) | const |
Definition at line 459 of file Utils.cpp.
Referenced by getForOpNode().
| Operation * MemRefDependenceGraph::getFusedLoopNestInsertionPoint | ( | unsigned | srcId, |
| unsigned | dstId | ||
| ) | const |
| unsigned MemRefDependenceGraph::getIncomingMemRefAccesses | ( | unsigned | id, |
| Value | memref | ||
| ) | const |
Definition at line 605 of file Utils.cpp.
References mlir::affine::MemRefDependenceGraph::Node::getStoreOpCount().
|
inline |
| const Node * MemRefDependenceGraph::getNode | ( | unsigned | id | ) | const |
Definition at line 452 of file Utils.cpp.
Referenced by canRemoveSrcNodeAfterFusion(), gatherEscapingMemrefs(), gatherProducerConsumerMemrefs(), getNode(), and getProducerCandidates().
| unsigned MemRefDependenceGraph::getOutEdgeCount | ( | unsigned | id, |
| Value | memref = nullptr |
||
| ) | const |
| bool MemRefDependenceGraph::hasDependencePath | ( | unsigned | srcId, |
| unsigned | dstId | ||
| ) | const |
Definition at line 570 of file Utils.cpp.
References mlir::affine::MemRefDependenceGraph::Edge::id, and mlir::Operation::isBeforeInBlock().
| bool MemRefDependenceGraph::hasEdge | ( | unsigned | srcId, |
| unsigned | dstId, | ||
| Value | value = nullptr |
||
| ) | const |
|
inline |
| bool MemRefDependenceGraph::init | ( | bool | fullAffineDependences = true | ) |
Definition at line 336 of file Utils.cpp.
References addNodeToMDG(), mlir::affine::getAffineForIVs(), mlir::Operation::getResults(), mlir::Operation::getUsers(), mlir::affine::MemRefDependenceGraph::Node::hasFree(), mlir::affine::MemRefDependenceGraph::Node::hasStore(), mlir::affine::MemRefDependenceGraph::Node::id, mlir::isMemoryEffectFree(), mlir::affine::MemRefDependenceGraph::Node::loads, mayDependence(), mlir::affine::MemRefDependenceGraph::Node::op, and mlir::affine::MemRefDependenceGraph::Node::stores.
| void MemRefDependenceGraph::print | ( | raw_ostream & | os | ) | const |
| void MemRefDependenceGraph::removeEdge | ( | unsigned | srcId, |
| unsigned | dstId, | ||
| Value | value | ||
| ) |
Definition at line 543 of file Utils.cpp.
References mlir::Value::getType().
| void MemRefDependenceGraph::updateEdges | ( | unsigned | sibId, |
| unsigned | dstId | ||
| ) |
| bool MemRefDependenceGraph::writesToLiveInOrEscapingMemrefs | ( | unsigned | id | ) | const |
Definition at line 497 of file Utils.cpp.
References mlir::affine::MemRefDependenceGraph::Node::stores.
| Block& mlir::affine::MemRefDependenceGraph::block |
The block for which this graph is created to perform fusion.
Definition at line 270 of file Utils.h.
Referenced by gatherEscapingMemrefs().
| DenseMap<unsigned, SmallVector<Edge, 2> > mlir::affine::MemRefDependenceGraph::inEdges |
Definition at line 144 of file Utils.h.
Referenced by getProducerCandidates().
| unsigned mlir::affine::MemRefDependenceGraph::nextNodeId = 0 |
Definition at line 152 of file Utils.h.
Referenced by addNodeToMDG().
Definition at line 141 of file Utils.h.
Referenced by addNodeToMDG(), and hasNode().
| DenseMap<unsigned, SmallVector<Edge, 2> > mlir::affine::MemRefDependenceGraph::outEdges |
Definition at line 147 of file Utils.h.
Referenced by canRemoveSrcNodeAfterFusion().