[mlir][vector] Extend TransferReadDropUnitDimsPattern to support partially-static...
commitbf897d5d77e974486e37d33e83f50f5ea95390fa
authorCullen Rhodes <cullen.rhodes@arm.com>
Mon, 20 Nov 2023 08:39:34 +0000 (20 08:39 +0000)
committerGitHub <noreply@github.com>
Mon, 20 Nov 2023 08:39:34 +0000 (20 08:39 +0000)
tree8e43b48b535d289c03c6242789c329ed3be3b473
parentcdf6693f072b97ec42a95f569115ad7f0afd37d5
[mlir][vector] Extend TransferReadDropUnitDimsPattern to support partially-static memrefs (#72142)

This patch extends TransferReadDropUnitDimsPattern to support dropping
unit dims from partially-static memrefs, for example:

%v = vector.transfer_read %base[%c0, %c0], %pad {in_bounds = [true, true]} :
  memref<?x1xi8, strided<[?, ?], offset: ?>>, vector<[16]x1xi8>

Is rewritten as:

%dim0 = memref.dim %base, %c0 : memref<?x1xi8, strided<[?, ?], offset: ?>>
%subview = memref.subview %base[0, 0] [%dim0, 1] [1, 1] :
  memref<?x1xi8, strided<[?, ?], offset: ?>> to memref<?xi8, #map1>
%v = vector.transfer_read %subview[%c0], %pad {in_bounds = [true]}
  : memref<?xi8, #map1>, vector<[16]xi8>

Scalable vectors are now also supported, the scalable dims were being
dropped when creating the rank-reduced vector type. The xfer op can also
have a mask of type 'vector.create_mask', which gets rewritten as long
as the mask of the unit dim is a constant of 1.
mlir/lib/Dialect/Vector/Transforms/VectorTransferOpTransforms.cpp
mlir/test/Dialect/Vector/vector-transfer-drop-unit-dims-patterns.mlir