Lines Matching defs:affine
9 // This file implements affine fusion.
38 namespace affine {
41 } // namespace affine
44 #define DEBUG_TYPE "affine-loop-fusion"
47 using namespace mlir::affine;
55 struct LoopFusion : public affine::impl::AffineLoopFusionBase<LoopFusion> {
183 /// 3. it (or its alias) are used by ops other than affine dereferencing ops
185 /// terminator ops, etc.); such ops do not deference the memref in an affine
215 /// Returns in 'escapingMemRefs' the memrefs from affine store ops in node 'id'
216 /// that escape the block or are accessed in a non-affine way.
346 /// Returns true if there are any non-affine uses of `memref` in any of
348 /// than affine read/write are treated as non-affine uses of `memref`.
354 // Check if there is a non-affine memref user in any op between `start` and
366 /// non-affine operation that is between `src` and `end` (exclusive of `src`
368 /// Any other than affine read/write are treated as non-affine uses of memref.
385 // Look for non-affine users between `src` and `end`.
867 // Skip if there are non-affine operations in between the 'srcNode'
870 // memrefs with non-affine operation users would be considered
876 << "Can't fuse: non-affine users in between the loops\n");
888 // common surrounding affine loops for the source and destination for
919 affine::canFuseLoops(srcAffineForOp, dstAffineForOp,
1129 // surrounding affine loops for the source and destination for ops). We
1149 affine::canFuseLoops(sibAffineForOp, dstAffineForOp,
1184 affine::fuseLoops(sibAffineForOp, dstAffineForOp,
1235 // Skip if a memref value in one node is used by a non-affine memref
1254 // Find the surrounding affine.for nested immediately within the
1395 // Call fusion on every op that has at least two affine.for nests (in post
1408 std::unique_ptr<Pass> mlir::affine::createLoopFusionPass(