MLIR  21.0.0git
Classes | Public Member Functions | Public Attributes | List of all members
mlir::affine::MemRefDependenceGraph Struct Reference

#include "mlir/Dialect/Affine/Analysis/Utils.h"

Classes

struct  Edge
 
struct  Node
 

Public Member Functions

 MemRefDependenceGraph (Block &block)
 
bool init ()
 
const NodegetNode (unsigned id) const
 
NodegetNode (unsigned id)
 
bool hasNode (unsigned id) const
 
const NodegetForOpNode (AffineForOp forOp) const
 
NodegetForOpNode (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...
 
OperationgetFusedLoopNestInsertionPoint (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, Nodenodes
 
DenseMap< unsigned, SmallVector< Edge, 2 > > inEdges
 
DenseMap< unsigned, SmallVector< Edge, 2 > > outEdges
 
DenseMap< Value, unsigned > memrefEdgeCount
 
unsigned nextNodeId = 0
 
Blockblock
 The block for which this graph is created to perform fusion. More...
 

Detailed Description

Definition at line 62 of file Utils.h.

Constructor & Destructor Documentation

◆ MemRefDependenceGraph()

mlir::affine::MemRefDependenceGraph::MemRefDependenceGraph ( Block block)
inline

Definition at line 154 of file Utils.h.

Member Function Documentation

◆ addEdge()

void MemRefDependenceGraph::addEdge ( unsigned  srcId,
unsigned  dstId,
Value  value 
)

Definition at line 440 of file Utils.cpp.

References mlir::Value::getType().

◆ addNode()

unsigned MemRefDependenceGraph::addNode ( Operation op)

Definition at line 375 of file Utils.cpp.

References mlir::affine::MemRefDependenceGraph::Node::id.

◆ addToNode()

void MemRefDependenceGraph::addToNode ( unsigned  id,
ArrayRef< Operation * >  loads,
ArrayRef< Operation * >  stores,
ArrayRef< Operation * >  memrefLoads,
ArrayRef< Operation * >  memrefStores,
ArrayRef< Operation * >  memrefFrees 
)

◆ clearNodeLoadAndStores()

void MemRefDependenceGraph::clearNodeLoadAndStores ( unsigned  id)

◆ dump()

void mlir::affine::MemRefDependenceGraph::dump ( ) const
inline

Definition at line 259 of file Utils.h.

References print().

◆ forEachMemRefEdge()

void MemRefDependenceGraph::forEachMemRefEdge ( ArrayRef< Edge edges,
const std::function< void(Edge)> &  callback 
)

Definition at line 730 of file Utils.cpp.

◆ forEachMemRefInputEdge()

void MemRefDependenceGraph::forEachMemRefInputEdge ( unsigned  id,
const std::function< void(Edge)> &  callback 
)

Definition at line 714 of file Utils.cpp.

◆ forEachMemRefOutputEdge()

void MemRefDependenceGraph::forEachMemRefOutputEdge ( unsigned  id,
const std::function< void(Edge)> &  callback 
)

Definition at line 722 of file Utils.cpp.

◆ gatherDefiningNodes()

void MemRefDependenceGraph::gatherDefiningNodes ( unsigned  id,
DenseSet< unsigned > &  definingNodes 
) const

Return all nodes which define SSA values used in node 'id'.

Definition at line 539 of file Utils.cpp.

◆ getForOpNode() [1/2]

Node* mlir::affine::MemRefDependenceGraph::getForOpNode ( AffineForOp  forOp)
inline

Definition at line 172 of file Utils.h.

References getForOpNode().

◆ getForOpNode() [2/2]

const Node * MemRefDependenceGraph::getForOpNode ( AffineForOp  forOp) const

Definition at line 367 of file Utils.cpp.

Referenced by getForOpNode().

◆ getFusedLoopNestInsertionPoint()

Operation * MemRefDependenceGraph::getFusedLoopNestInsertionPoint ( unsigned  srcId,
unsigned  dstId 
) const

Definition at line 553 of file Utils.cpp.

◆ getIncomingMemRefAccesses()

unsigned MemRefDependenceGraph::getIncomingMemRefAccesses ( unsigned  id,
Value  memref 
) const

◆ getNode() [1/2]

Node* mlir::affine::MemRefDependenceGraph::getNode ( unsigned  id)
inline

Definition at line 162 of file Utils.h.

References getNode().

◆ getNode() [2/2]

const Node * MemRefDependenceGraph::getNode ( unsigned  id) const

◆ getOutEdgeCount()

unsigned MemRefDependenceGraph::getOutEdgeCount ( unsigned  id,
Value  memref = nullptr 
) const

Definition at line 529 of file Utils.cpp.

◆ hasDependencePath()

bool MemRefDependenceGraph::hasDependencePath ( unsigned  srcId,
unsigned  dstId 
) const

◆ hasEdge()

bool MemRefDependenceGraph::hasEdge ( unsigned  srcId,
unsigned  dstId,
Value  value = nullptr 
) const

Definition at line 425 of file Utils.cpp.

◆ hasNode()

bool mlir::affine::MemRefDependenceGraph::hasNode ( unsigned  id) const
inline

Definition at line 168 of file Utils.h.

References nodes.

◆ init()

bool MemRefDependenceGraph::init ( )

◆ print()

void MemRefDependenceGraph::print ( raw_ostream &  os) const

Definition at line 745 of file Utils.cpp.

Referenced by dump().

◆ removeEdge()

void MemRefDependenceGraph::removeEdge ( unsigned  srcId,
unsigned  dstId,
Value  value 
)

Definition at line 451 of file Utils.cpp.

References mlir::Value::getType().

◆ removeNode()

void MemRefDependenceGraph::removeNode ( unsigned  id)

Definition at line 382 of file Utils.cpp.

◆ updateEdges() [1/2]

void MemRefDependenceGraph::updateEdges ( unsigned  sibId,
unsigned  dstId 
)

Definition at line 668 of file Utils.cpp.

◆ updateEdges() [2/2]

void MemRefDependenceGraph::updateEdges ( unsigned  srcId,
unsigned  dstId,
const DenseSet< Value > &  privateMemRefs,
bool  removeSrcId 
)

Definition at line 629 of file Utils.cpp.

◆ writesToLiveInOrEscapingMemrefs()

bool MemRefDependenceGraph::writesToLiveInOrEscapingMemrefs ( unsigned  id) const

Definition at line 405 of file Utils.cpp.

References mlir::affine::MemRefDependenceGraph::Node::stores.

Member Data Documentation

◆ block

Block& mlir::affine::MemRefDependenceGraph::block

The block for which this graph is created to perform fusion.

Definition at line 262 of file Utils.h.

Referenced by gatherEscapingMemrefs().

◆ inEdges

DenseMap<unsigned, SmallVector<Edge, 2> > mlir::affine::MemRefDependenceGraph::inEdges

Definition at line 144 of file Utils.h.

Referenced by getProducerCandidates().

◆ memrefEdgeCount

DenseMap<Value, unsigned> mlir::affine::MemRefDependenceGraph::memrefEdgeCount

Definition at line 150 of file Utils.h.

◆ nextNodeId

unsigned mlir::affine::MemRefDependenceGraph::nextNodeId = 0

Definition at line 152 of file Utils.h.

Referenced by addNodeToMDG().

◆ nodes

DenseMap<unsigned, Node> mlir::affine::MemRefDependenceGraph::nodes

Definition at line 141 of file Utils.h.

Referenced by addNodeToMDG(), and hasNode().

◆ outEdges

DenseMap<unsigned, SmallVector<Edge, 2> > mlir::affine::MemRefDependenceGraph::outEdges

Definition at line 147 of file Utils.h.

Referenced by canRemoveSrcNodeAfterFusion().


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