[Mlir-commits] [mlir] [MLIR][Affine] Extend/generalize MDG to properly add edges between non-affine ops (PR #125451)
Uday Bondhugula
llvmlistbot at llvm.org
Tue Feb 4 04:59:15 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)) {
----------------
bondhugula wrote:
Yes, that should work but it'd be a overkill since the LoopNestCollector class is used, and it has several fields that'd be unused for this trivial case. Since this is just a couple of lines for the trivial case, we can leave it like this.
https://github.com/llvm/llvm-project/pull/125451
More information about the Mlir-commits
mailing list