[Mlir-commits] [mlir] [mlir][vector] handle empty permutation in transpose (PR #231940)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Oct 14 17:48:58 PDT 2026
https://github.com/StarOne01 updated https://github.com/llvm/llvm-project/pull/231940
>From 783bd28db715a6c44806a6eb9478efa6256eba20 Mon Sep 17 00:00:00 2001
From: Prashanth <ping at starone01.me>
Date: Wed, 14 Oct 2026 19:24:12 +0530
Subject: [PATCH 1/4] [mlir][vector] Handle empty permutation in
ExtractFromInsertTransposeChainState
---
mlir/lib/Dialect/Vector/IR/VectorOps.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index 72bab1a37c5008..f917cd211a0ee2 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -1651,6 +1651,10 @@ LogicalResult ExtractFromInsertTransposeChainState::handleTransposeOp() {
if (!nextTransposeOp)
return failure();
+
+ if (nextTransposeOp.getPermutation().empty())
+ return success();
+
AffineMap m = inversePermutation(AffineMap::getPermutationMap(
nextTransposeOp.getPermutation(), extractOp.getContext()));
extractPosition = applyPermutationMap(m, ArrayRef(extractPosition));
>From 1b15be8aa19b1ae9084d799032e0f55f74296c0c Mon Sep 17 00:00:00 2001
From: Prashanth <ping at starone01.me>
Date: Wed, 14 Oct 2026 19:49:08 +0530
Subject: [PATCH 2/4] [mlir][vector] format the c++ change and add test for
extracting from 0D transpose
---
mlir/lib/Dialect/Vector/IR/VectorOps.cpp | 2 +-
.../Vector/vector-transpose-lowering.mlir | 22 +++++++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index f917cd211a0ee2..3aafeb0a570ce7 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -1654,7 +1654,7 @@ LogicalResult ExtractFromInsertTransposeChainState::handleTransposeOp() {
if (nextTransposeOp.getPermutation().empty())
return success();
-
+
AffineMap m = inversePermutation(AffineMap::getPermutationMap(
nextTransposeOp.getPermutation(), extractOp.getContext()));
extractPosition = applyPermutationMap(m, ArrayRef(extractPosition));
diff --git a/mlir/test/Dialect/Vector/vector-transpose-lowering.mlir b/mlir/test/Dialect/Vector/vector-transpose-lowering.mlir
index 7838aad1825bc2..cb6a187ecef8b0 100644
--- a/mlir/test/Dialect/Vector/vector-transpose-lowering.mlir
+++ b/mlir/test/Dialect/Vector/vector-transpose-lowering.mlir
@@ -365,3 +365,25 @@ module attributes {transform.with_named_sequence} {
transform.yield
}
}
+
+// -----
+
+// CHECK-LABEL: func.func @extract_transpose_0d
+// CHECK-SAME: (%[[ARG:.*]]: vector<f32>) -> f32
+func.func @extract_transpose_0d(%arg: vector<f32>) -> f32 {
+ %t = vector.transpose %arg, [] : vector<f32> to vector<f32>
+ %x = vector.extract %t[] : f32 from vector<f32>
+ // CHECK: %[[RES:.*]] = vector.extract %[[ARG]]
+ // CHECK: return %[[RES]] : f32
+ return %x : f32
+}
+
+module attributes {transform.with_named_sequence} {
+ transform.named_sequence @__transform_main(%root : !transform.any_op {transform.readonly}) {
+ %func_op = transform.structured.match ops{["func.func"]} in %root : (!transform.any_op) -> !transform.op<"func.func">
+ transform.apply_patterns to %func_op {
+ transform.apply_patterns.vector.lower_transpose lowering_strategy = "eltwise"
+ } : !transform.op<"func.func">
+ transform.yield
+ }
+}
>From 0ea364ae1e65a1915b91e9f0fd978fa14e4e68bd Mon Sep 17 00:00:00 2001
From: Prashanth <ping at starone01.me>
Date: Wed, 14 Oct 2026 20:18:30 +0530
Subject: [PATCH 3/4] [mlir][vector] move the new test and remove unused
transform named sequence for transpose lowering
---
.../Dialect/Vector/vector-transpose-lowering.mlir | 14 +-------------
1 file changed, 1 insertion(+), 13 deletions(-)
diff --git a/mlir/test/Dialect/Vector/vector-transpose-lowering.mlir b/mlir/test/Dialect/Vector/vector-transpose-lowering.mlir
index cb6a187ecef8b0..2d91bb0c8ab928 100644
--- a/mlir/test/Dialect/Vector/vector-transpose-lowering.mlir
+++ b/mlir/test/Dialect/Vector/vector-transpose-lowering.mlir
@@ -356,18 +356,6 @@ func.func @transpose10_4x1xf32_scalable(%arg0: vector<4x[1]xf32>) -> vector<[1]x
return %0 : vector<[1]x4xf32>
}
-module attributes {transform.with_named_sequence} {
- transform.named_sequence @__transform_main(%root : !transform.any_op {transform.readonly}) {
- %func_op = transform.structured.match ops{["func.func"]} in %root : (!transform.any_op) -> !transform.op<"func.func">
- transform.apply_patterns to %func_op {
- transform.apply_patterns.vector.lower_transpose
- } : !transform.op<"func.func">
- transform.yield
- }
-}
-
-// -----
-
// CHECK-LABEL: func.func @extract_transpose_0d
// CHECK-SAME: (%[[ARG:.*]]: vector<f32>) -> f32
func.func @extract_transpose_0d(%arg: vector<f32>) -> f32 {
@@ -382,7 +370,7 @@ module attributes {transform.with_named_sequence} {
transform.named_sequence @__transform_main(%root : !transform.any_op {transform.readonly}) {
%func_op = transform.structured.match ops{["func.func"]} in %root : (!transform.any_op) -> !transform.op<"func.func">
transform.apply_patterns to %func_op {
- transform.apply_patterns.vector.lower_transpose lowering_strategy = "eltwise"
+ transform.apply_patterns.vector.lower_transpose
} : !transform.op<"func.func">
transform.yield
}
>From 99a752390d90dc7e2fd33d342e79f77c305c244b Mon Sep 17 00:00:00 2001
From: Prashanth <ping at starone01.me>
Date: Thu, 15 Oct 2026 06:18:31 +0530
Subject: [PATCH 4/4] [mlir][vector] update CHECK for extract in 0D transpose
to ensure no transpose is performed and the same type
---
mlir/test/Dialect/Vector/vector-transpose-lowering.mlir | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/mlir/test/Dialect/Vector/vector-transpose-lowering.mlir b/mlir/test/Dialect/Vector/vector-transpose-lowering.mlir
index 2d91bb0c8ab928..43096b565f2c7b 100644
--- a/mlir/test/Dialect/Vector/vector-transpose-lowering.mlir
+++ b/mlir/test/Dialect/Vector/vector-transpose-lowering.mlir
@@ -361,7 +361,8 @@ func.func @transpose10_4x1xf32_scalable(%arg0: vector<4x[1]xf32>) -> vector<[1]x
func.func @extract_transpose_0d(%arg: vector<f32>) -> f32 {
%t = vector.transpose %arg, [] : vector<f32> to vector<f32>
%x = vector.extract %t[] : f32 from vector<f32>
- // CHECK: %[[RES:.*]] = vector.extract %[[ARG]]
+ // CHECK: %[[RES:.*]] = vector.extract %[[ARG]][] : f32 from vector<f32>
+ // CHECK-NOT: vector.transpose
// CHECK: return %[[RES]] : f32
return %x : f32
}
More information about the Mlir-commits
mailing list