MLIR 22.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 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'.
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, unsignedmemrefEdgeCount
unsigned nextNodeId = 0
Blockblock
 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 532 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 467 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 821 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 805 of file Utils.cpp.

References forEachMemRefEdge(), and inEdges.

◆ forEachMemRefOutputEdge()

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

Definition at line 813 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 631 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 459 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 621 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 517 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 833 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 543 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 474 of file Utils.cpp.

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

◆ updateEdges() [1/2]

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

Definition at line 759 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 720 of file Utils.cpp.

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

◆ writesToLiveInOrEscapingMemrefs()

bool MemRefDependenceGraph::writesToLiveInOrEscapingMemrefs ( unsigned id) const

Definition at line 497 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: