Instead of an SCF for loop, these pattern generate fully unrolled loops with no temporary buffer allocations.
Depends On D101745
| Paths 
 |  Differential  D101981  
[mlir] Unrolled progressive-vector-to-scf. ClosedPublic Authored by springerm on May 6 2021, 1:59 AM. 
Details Summary Instead of an SCF for loop, these pattern generate fully unrolled loops with no temporary buffer allocations. Depends On D101745 
Diff Detail 
 Event Timelinespringerm added a child revision: D102042: [mlir] Support memref layout maps in vector transfer ops.May 6 2021, 7:29 PM Comment Actions we should have some basic test which shows the unrolling and the not-unrolled part. 
 This revision now requires changes to proceed.May 12 2021, 3:25 AM This revision is now accepted and ready to land.May 12 2021, 3:31 AM This revision was landed with ongoing or failed builds.May 12 2021, 9:09 PM Closed by commit rG9b77be5583d2: [mlir] Unrolled progressive-vector-to-scf. (authored by springerm).  ·  Explain Why This revision was automatically updated to reflect the committed changes. 
Revision Contents 
 
 
Diff 345011 mlir/include/mlir/Conversion/VectorToSCF/ProgressiveVectorToSCF.h
 mlir/lib/Conversion/VectorToSCF/ProgressiveVectorToSCF.cpp
 mlir/test/Conversion/VectorToSCF/unrolled-vector-to-loops.mlir
 
 mlir/test/Integration/Dialect/Vector/CPU/test-transfer-read-1d.mlir
 mlir/test/Integration/Dialect/Vector/CPU/test-transfer-read-2d.mlir
 mlir/test/Integration/Dialect/Vector/CPU/test-transfer-read-3d.mlir
 mlir/test/lib/Transforms/TestVectorTransforms.cpp
 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
can we refactor a bit for early exit and reducing nesting?
auto mask = xferOp.mask(); if (!mask) return; if (isOuter...) { newXferOp ... return; } // rest