[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
Sun Feb 2 20:54:05 PST 2025
================
@@ -37,19 +37,32 @@ struct MemRefAccess;
// was encountered in the loop nest.
struct LoopNestStateCollector {
SmallVector<AffineForOp, 4> forOps;
+ // Affine loads.
SmallVector<Operation *, 4> loadOpInsts;
+ // Affine stores.
SmallVector<Operation *, 4> storeOpInsts;
- bool hasNonAffineRegionOp = false;
+ // Non-affine loads.
+ SmallVector<Operation *, 4> memrefLoads;
+ // Non-affine stores.
+ SmallVector<Operation *, 4> memrefStores;
+ // Free operations.
+ SmallVector<Operation *, 4> memrefFrees;
// Collects load and store operations, and whether or not a region holding op
// other than ForOp and IfOp was encountered in the loop nest.
void collect(Operation *opToWalk);
};
// MemRefDependenceGraph is a graph data structure where graph nodes are
-// top-level operations in a `Block` which contain load/store ops, and edges
-// are memref dependences between the nodes.
-// TODO: Add a more flexible dependence graph representation.
+// top-level operations in a `Block` and edges are memref dependences or SSA
+// dependences (on memrefs) between the nodes. Nodes are created for all
+// top-level operations except in certain cases (see `init` method). Edges are
+// created between nodes with a dependence (see `Edge` documentation). Edges
+// aren't created from/to nodes that have no memory effects. This strucuture
+// also supports checkpointing the current state and reverting to the last
+// committed state. Note that we maintain only one committed state and hence
+// it's not possible to recover a commit state other than the last committed
----------------
patel-vimal wrote:
Seems like this is not relevant here.
https://github.com/llvm/llvm-project/pull/125451
More information about the Mlir-commits
mailing list