[all-commits] [llvm/llvm-project] 35b65b: [mlir][Vector] Add transformation + pattern to spl...
Nicolas Vasilache via All-commits
all-commits at lists.llvm.org
Mon Aug 3 01:55:54 PDT 2020
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: 35b65be041127db9fe23d3128a004c888893cbae
https://github.com/llvm/llvm-project/commit/35b65be041127db9fe23d3128a004c888893cbae
Author: Nicolas Vasilache <ntv at google.com>
Date: 2020-08-03 (Mon, 03 Aug 2020)
Changed paths:
M mlir/include/mlir/Dialect/Vector/VectorTransforms.h
M mlir/include/mlir/Interfaces/VectorInterfaces.td
M mlir/lib/Dialect/Vector/VectorTransforms.cpp
A mlir/test/Dialect/Vector/vector-transfer-full-partial-split.mlir
M mlir/test/lib/Transforms/TestVectorTransforms.cpp
Log Message:
-----------
[mlir][Vector] Add transformation + pattern to split vector.transfer_read into full and partial copies.
This revision adds a transformation and a pattern that rewrites a "maybe masked" `vector.transfer_read %view[...], %pad `into a pattern resembling:
```
%1:3 = scf.if (%inBounds) {
scf.yield %view : memref<A...>, index, index
} else {
%2 = vector.transfer_read %view[...], %pad : memref<A...>, vector<...>
%3 = vector.type_cast %extra_alloc : memref<...> to
memref<vector<...>> store %2, %3[] : memref<vector<...>> %4 =
memref_cast %extra_alloc: memref<B...> to memref<A...> scf.yield %4 :
memref<A...>, index, index
}
%res= vector.transfer_read %1#0[%1#1, %1#2] {masked = [false ... false]}
```
where `extra_alloc` is a top of the function alloca'ed buffer of one vector.
This rewrite makes it possible to realize the "always full tile" abstraction where vector.transfer_read operations are guaranteed to read from a padded full buffer.
The extra work only occurs on the boundary tiles.
Differential Revision: https://reviews.llvm.org/D84631
More information about the All-commits
mailing list