Skip to content

Commit bfed3f5

Browse files
[mlir][Linalg] Change linalg.transpose to use the output indexing map as identity.
This makes it consistent with how other linalg operations represent indexing maps.
1 parent 8887178 commit bfed3f5

File tree

3 files changed

+16
-16
lines changed

3 files changed

+16
-16
lines changed

mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1773,9 +1773,9 @@ ArrayAttr TransposeOp::getIndexingMaps() {
17731773
Builder builder(getContext());
17741774
int64_t rank = getInit().getType().getRank();
17751775
return builder.getAffineMapArrayAttr(
1776-
{builder.getMultiDimIdentityMap(rank),
1777-
AffineMap::getPermutationMap(
1778-
llvm::to_vector_of<unsigned>(getPermutation()), getContext())});
1776+
{inversePermutation(AffineMap::getPermutationMap(
1777+
llvm::to_vector_of<unsigned>(getPermutation()), getContext())),
1778+
builder.getMultiDimIdentityMap(rank)});
17791779
}
17801780

17811781
void TransposeOp::getEffects(

mlir/test/Dialect/Linalg/vectorization.mlir

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -371,16 +371,16 @@ module attributes {transform.with_named_sequence} {
371371
// CHECK: #[[MAP:.*]] = affine_map<(d0, d1) -> (d1, d0)>
372372
// CHECK: func @test_masked_vectorize_linalg_transpose
373373
func.func @test_masked_vectorize_linalg_transpose(%arg0: tensor<?x?xf32>, %arg1: tensor<?x?xf32>) -> tensor<?x?xf32> {
374-
// CHECK: %[[C0:.*]] = arith.constant 0 : index
375-
// CHECK: %[[D0:.*]] = tensor.dim %arg0, %[[C0]]
376-
// CHECK: %[[C1:.*]] = arith.constant 1 : index
377-
// CHECK: %[[D1:.*]] = tensor.dim %arg0, %[[C1]]
374+
// CHECK-DAG: %[[C0:.*]] = arith.constant 0 : index
375+
// CHECK-DAG: %[[D0:.*]] = tensor.dim %arg0, %[[C0]]
376+
// CHECK-DAG: %[[C1:.*]] = arith.constant 1 : index
377+
// CHECK-DAG: %[[D1:.*]] = tensor.dim %arg0, %[[C1]]
378378
// CHECK: %[[MASK0:.*]] = vector.create_mask %[[D0]], %[[D1]]
379-
// CHECK: %[[LOAD:.*]] = vector.mask %[[MASK0]] { vector.transfer_read %arg0{{.+}} }
380-
// CHECK-SAME: vector<2x4xi1> -> vector<2x4xf32>
379+
// CHECK: %[[LOAD:.*]] = vector.mask %[[MASK0]] { vector.transfer_read %arg0{{.+}} permutation_map = #[[MAP]]{{.+}} }
380+
// CHECK-SAME: vector<4x2xi1> -> vector<2x4xf32>
381381
// CHECK: %[[MASK1:.*]] = vector.create_mask %[[D1]], %[[D0]]
382-
// CHECK: %[[WRITE:.*]] = vector.mask %[[MASK1]] { vector.transfer_write %[[LOAD]], %arg1{{.+}} permutation_map = #[[MAP]]{{.+}} }
383-
// CHECK-SAME: vector<4x2xi1> -> tensor<?x?xf32>
382+
// CHECK: %[[WRITE:.*]] = vector.mask %[[MASK1]] { vector.transfer_write %[[LOAD]], %arg1{{.+}} }
383+
// CHECK-SAME: vector<2x4xi1> -> tensor<?x?xf32>
384384
// CHECK: return %[[WRITE]]
385385
%0 = linalg.transpose ins(%arg0 : tensor<?x?xf32>) outs(%arg1 : tensor<?x?xf32>) permutation = [1, 0]
386386
return %0 : tensor<?x?xf32>

mlir/test/Interfaces/TilingInterface/lower-to-loops-using-interface.mlir

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -261,11 +261,11 @@ module attributes {transform.with_named_sequence} {
261261
// CHECK-DAG: %[[C32:.*]] = arith.constant 32 : index
262262
// CHECK-DAG: %[[C64:.*]] = arith.constant 64 : index
263263

264-
// CHECK: scf.for %[[I:.*]] = %[[C0]] to %[[C16]] step %[[C1]] {
265-
// CHECK: scf.for %[[J:.*]] = %[[C0]] to %[[C32]] step %[[C1]] {
266-
// CHECK: scf.for %[[K:.*]] = %[[C0]] to %[[C64]] step %[[C1]] {
267-
// CHECK: %[[ELEM:.*]] = memref.load %[[IN]][%[[I]], %[[J]], %[[K]]]
268-
// CHECK: memref.store %[[ELEM]], %[[OUT]][%[[J]], %[[K]], %[[I]]]
264+
// CHECK: scf.for %[[I:.*]] = %[[C0]] to %[[C32]] step %[[C1]] {
265+
// CHECK: scf.for %[[J:.*]] = %[[C0]] to %[[C64]] step %[[C1]] {
266+
// CHECK: scf.for %[[K:.*]] = %[[C0]] to %[[C16]] step %[[C1]] {
267+
// CHECK: %[[ELEM:.*]] = memref.load %[[IN]][%[[K]], %[[I]], %[[J]]]
268+
// CHECK: memref.store %[[ELEM]], %[[OUT]][%[[I]], %[[J]], %[[K]]]
269269

270270
// -----
271271

0 commit comments

Comments
 (0)