MLIR 24.0.0git
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 (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'.
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.

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.

References block.

Referenced by getForOpNode(), and getNode().

Member Function Documentation

◆ addEdge()

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

Definition at line 543 of file Utils.cpp.

References mlir::Value::getType(), hasEdge(), inEdges, memrefEdgeCount, and outEdges.

Referenced by init(), updateEdges(), and updateEdges().

◆ addNode()

unsigned MemRefDependenceGraph::addNode ( Operation * op)

Definition at line 478 of file Utils.cpp.

References mlir::affine::MemRefDependenceGraph::Node::id, nextNodeId, and nodes.

◆ addToNode()

◆ clearNodeLoadAndStores()

void MemRefDependenceGraph::clearNodeLoadAndStores ( unsigned id)

◆ dump()

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

Definition at line 267 of file Utils.h.

References print().

◆ forEachMemRefEdge()

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

Definition at line 832 of file Utils.cpp.

References nodes.

Referenced by forEachMemRefInputEdge(), and forEachMemRefOutputEdge().

◆ forEachMemRefInputEdge()

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

Definition at line 816 of file Utils.cpp.

References forEachMemRefEdge(), and inEdges.

◆ forEachMemRefOutputEdge()

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

Definition at line 824 of file Utils.cpp.

References forEachMemRefEdge(), and outEdges.

◆ gatherDefiningNodes()

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

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

Definition at line 642 of file Utils.cpp.

References inEdges.

Referenced by getFusedLoopNestInsertionPoint().

◆ getForOpNode() [1/2]

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

Definition at line 180 of file Utils.h.

References MemRefDependenceGraph().

◆ getForOpNode() [2/2]

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

Definition at line 470 of file Utils.cpp.

References nodes.

◆ getFusedLoopNestInsertionPoint()

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

◆ getIncomingMemRefAccesses()

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

◆ getNode() [1/2]

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

Definition at line 170 of file Utils.h.

References MemRefDependenceGraph().

◆ getNode() [2/2]

◆ getOutEdgeCount()

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

Definition at line 632 of file Utils.cpp.

References outEdges.

◆ hasDependencePath()

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

◆ hasEdge()

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

Definition at line 528 of file Utils.cpp.

References inEdges, and outEdges.

Referenced by addEdge().

◆ hasNode()

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

Definition at line 176 of file Utils.h.

References nodes.

◆ init()

◆ print()

void MemRefDependenceGraph::print ( raw_ostream & os) const

Definition at line 844 of file Utils.cpp.

References inEdges, nodes, and outEdges.

Referenced by dump().

◆ removeEdge()

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

Definition at line 554 of file Utils.cpp.

References mlir::Value::getType(), inEdges, memrefEdgeCount, and outEdges.

Referenced by removeNode(), updateEdges(), and updateEdges().

◆ removeNode()

void MemRefDependenceGraph::removeNode ( unsigned id)

Definition at line 485 of file Utils.cpp.

References inEdges, nodes, outEdges, and removeEdge().

◆ updateEdges() [1/2]

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

Definition at line 770 of file Utils.cpp.

References addEdge(), inEdges, outEdges, and removeEdge().

◆ updateEdges() [2/2]

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

Definition at line 731 of file Utils.cpp.

References addEdge(), inEdges, outEdges, and removeEdge().

◆ writesToLiveInOrEscapingMemrefs()

bool MemRefDependenceGraph::writesToLiveInOrEscapingMemrefs ( unsigned id) const

Definition at line 508 of file Utils.cpp.

References getNode(), and 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 270 of file Utils.h.

Referenced by gatherEscapingMemrefs(), init(), and MemRefDependenceGraph().

◆ inEdges

◆ memrefEdgeCount

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

Definition at line 150 of file Utils.h.

Referenced by addEdge(), and removeEdge().

◆ nextNodeId

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

Definition at line 152 of file Utils.h.

Referenced by addNode(), addNodeToMDG(), and init().

◆ nodes

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

◆ outEdges


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