[Mlir-commits] [mlir] [MLIR][Affine] Extend/generalize MDG to properly add edges between non-affine ops (PR #125451)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Feb 4 01:00:49 PST 2025
================
@@ -116,36 +249,19 @@ bool MemRefDependenceGraph::init() {
DenseMap<Operation *, unsigned> forToNodeMap;
for (Operation &op : block) {
- if (dyn_cast<AffineForOp>(op)) {
- // Create graph node 'id' to represent top-level 'forOp' and record
- // all loads and store accesses it contains.
- LoopNestStateCollector collector;
- collector.collect(&op);
- // Return false if a region holding op other than 'affine.for' and
- // 'affine.if' was found (not currently supported).
- if (collector.hasNonAffineRegionOp)
+ if (auto forOp = dyn_cast<AffineForOp>(op)) {
+ Node *node = addNodeToMDG(&op, *this, memrefAccesses);
+ if (!node)
return false;
- Node node(nextNodeId++, &op);
- for (auto *opInst : collector.loadOpInsts) {
- node.loads.push_back(opInst);
- auto memref = cast<AffineReadOpInterface>(opInst).getMemRef();
- memrefAccesses[memref].insert(node.id);
- }
- for (auto *opInst : collector.storeOpInsts) {
- node.stores.push_back(opInst);
- auto memref = cast<AffineWriteOpInterface>(opInst).getMemRef();
- memrefAccesses[memref].insert(node.id);
- }
- forToNodeMap[&op] = node.id;
- nodes.insert({node.id, node});
- } else if (dyn_cast<AffineReadOpInterface>(op)) {
+ forToNodeMap[&op] = node->id;
+ } else if (isa<AffineReadOpInterface>(op)) {
----------------
patel-vimal wrote:
Can we delegate handling of affine load/stores as well to `addNodeToMDG` function as well?
https://github.com/llvm/llvm-project/pull/125451
More information about the Mlir-commits
mailing list