[Mlir-commits] [mlir] [mlir][vector] add ApplyReorderMultiReductionDimsPatternsOp tests (PR #180977)

Erick Ochoa Lopez llvmlistbot at llvm.org
Tue Feb 17 12:38:09 PST 2026


https://github.com/amd-eochoalo updated https://github.com/llvm/llvm-project/pull/180977

>From 67ec909e00f17a2e641ff3588c66edeb3abc038a Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Wed, 11 Feb 2026 10:30:50 -0500
Subject: [PATCH 01/16] [mlir][vector] Add
 apply_patterns.vector.lower_multi_reduction_transformation

Creates transform op for testing finer grained patterns.
---
 .../Vector/TransformOps/VectorTransformOps.td | 23 +++++++++++++++++++
 .../TransformOps/VectorTransformOps.cpp       |  8 +++++++
 2 files changed, 31 insertions(+)

diff --git a/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td b/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td
index c9668fe30e6482..dfe54835ac89f1 100644
--- a/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td
+++ b/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td
@@ -243,6 +243,29 @@ def ApplyLowerMultiReductionPatternsOp : Op<Transform_Dialect,
   }];
 }
 
+def ApplyLowerMultiReductionTransformationPatternsOp : Op<Transform_Dialect,
+    "apply_patterns.vector.lower_multi_reduction_transformation",
+    [DeclareOpInterfaceMethods<PatternDescriptorOpInterface>]> {
+  let description = [{
+    Indicates that vector multi_reduction-like operations should be
+    transformed such that all reduction dimensions become innermost or
+    outermost, and 1-D reductions are lifted to 2-D.
+
+    This populates the patterns from
+    `populateVectorMultiReductionTransformationPatterns`, i.e.:
+    * `InnerOuterDimReductionConversion`
+    * `OneDimMultiReductionToTwoDim`
+  }];
+
+  let arguments = (ins DefaultValuedAttr<VectorMultiReductionLoweringAttr,
+      "vector::VectorMultiReductionLowering::InnerParallel">:$lowering_strategy
+  );
+
+  let assemblyFormat = [{
+    (`lowering_strategy` `=` $lowering_strategy^)? attr-dict
+  }];
+}
+
 def ApplyLowerOuterProductPatternsOp : Op<Transform_Dialect,
     "apply_patterns.vector.lower_outerproduct",
     [DeclareOpInterfaceMethods<PatternDescriptorOpInterface>]> {
diff --git a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp
index 5495f8abdb3359..3e9af181195c33 100644
--- a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp
+++ b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp
@@ -138,6 +138,14 @@ void transform::ApplyLowerMultiReductionPatternsOp::populatePatterns(
       patterns, vectorTransformOptions.vectorMultiReductionLowering);
 }
 
+void transform::ApplyLowerMultiReductionTransformationPatternsOp::
+    populatePatterns(RewritePatternSet &patterns) {
+  vector::VectorTransformsOptions vectorTransformOptions;
+  vectorTransformOptions.setVectorMultiReductionLowering(getLoweringStrategy());
+  vector::populateVectorMultiReductionTransformationPatterns(
+      patterns, vectorTransformOptions.vectorMultiReductionLowering);
+}
+
 void transform::ApplyLowerOuterProductPatternsOp::populatePatterns(
     RewritePatternSet &patterns) {
   populateVectorOuterProductLoweringPatterns(patterns);

>From 93d41427c799013ca63cff74bbf1cd485ff8e28b Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Wed, 11 Feb 2026 10:51:05 -0500
Subject: [PATCH 02/16] [mlir][vector] Add test NFC

---
 ...vector-multi-reduction-transformation.mlir | 124 ++++++++++++++++++
 1 file changed, 124 insertions(+)
 create mode 100644 mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir

diff --git a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
new file mode 100644
index 00000000000000..24009821a38b12
--- /dev/null
+++ b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
@@ -0,0 +1,124 @@
+// RUN: mlir-opt %s --transform-interpreter='entry-point=innerreduction' | FileCheck %s --check-prefix=INNERREDUCTION
+// RUN: mlir-opt %s --transform-interpreter='entry-point=innerparallel' | FileCheck %s --check-prefix=INNERPARALLEL
+
+// INNERREDUCTION-LABEL: func @transpose_reduction_dims_innerreduction
+// INNERREDUCTION-SAME:    %[[INPUT:.+]]: vector<3x2x4xf32>
+// INNERREDUCTION-SAME:    %[[ACC:.+]]: vector<2x4xf32>
+func.func @transpose_reduction_dims_innerreduction(%arg0: vector<3x2x4xf32>, %acc: vector<2x4xf32>) -> vector<2x4xf32> {
+    // INNERREDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [1, 2, 0]
+    // INNERREDUCTION: %[[RESULT:.+]] = vector.multi_reduction <mul>, %[[TRANSPOSED]], %[[ACC]] [2]
+    %0 = vector.multi_reduction <mul>, %arg0, %acc [0] : vector<3x2x4xf32> to vector<2x4xf32>
+    // INNERREDUCTION: return %[[RESULT]]
+    return %0 : vector<2x4xf32>
+}
+
+// INNERPARALLEL-LABEL: func @transpose_reduction_dims_innerparallel
+// INNERPARALLEL-SAME:    %[[INPUT:.+]]: vector<3x2x4xf32>
+// INNERPARALLEL-SAME:    %[[ACC:.+]]: vector<3x2xf32>
+func.func @transpose_reduction_dims_innerparallel(%arg0: vector<3x2x4xf32>, %acc: vector<3x2xf32>) -> vector<3x2xf32> {
+    // INNERPARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [2, 0, 1]
+    // INNERPARALLEL: vector.multi_reduction <mul>, %[[TRANSPOSED]], %[[ACC]] [0]
+    %0 = vector.multi_reduction <mul>, %arg0, %acc [2] : vector<3x2x4xf32> to vector<3x2xf32>
+    return %0 : vector<3x2xf32>
+}
+
+// INNERREDUCTION-LABEL: func @transpose_multi_reduction_dims
+// INNERREDUCTION-SAME:    %[[INPUT:.+]]: vector<2x3x4x5xf32>
+// INNERREDUCTION-SAME:    %[[ACC:.+]]: vector<2x5xf32>
+func.func @transpose_multi_reduction_dims(%arg0: vector<2x3x4x5xf32>, %acc: vector<2x5xf32>) -> vector<2x5xf32> {
+    // INNERREDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [0, 3, 1, 2]
+    // INNERREDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [2, 3]
+    %0 = vector.multi_reduction <add>, %arg0, %acc [1, 2] : vector<2x3x4x5xf32> to vector<2x5xf32>
+    // INNERREDUCTION: return %[[RESULT]]
+    return %0 : vector<2x5xf32>
+}
+
+// INNERREDUCTION-LABEL: func @transpose_parallel_middle
+// INNERREDUCTION-SAME:    %[[INPUT:.+]]: vector<3x4x5xf32>
+// INNERREDUCTION-SAME:    %[[ACC:.+]]: vector<4xf32>
+// INNERPARALLEL-LABEL: func @transpose_parallel_middle
+// INNERPARALLEL-SAME:    %[[INPUT:.+]]: vector<3x4x5xf32>
+// INNERPARALLEL-SAME:    %[[ACC:.+]]: vector<4xf32>
+func.func @transpose_parallel_middle(%arg0: vector<3x4x5xf32>, %acc: vector<4xf32>) -> vector<4xf32> {
+    // INNERREDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [1, 0, 2]
+    // INNERREDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [1, 2]
+    // INNERPARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [0, 2, 1]
+    // INNERPARALLEL: vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [0, 1]
+    %0 = vector.multi_reduction <add>, %arg0, %acc [0, 2] : vector<3x4x5xf32> to vector<4xf32>
+    // INNERREDUCTION: return %[[RESULT]]
+    return %0 : vector<4xf32>
+}
+
+// INNERREDUCTION-LABEL: func @one_dim_to_two_dim_innerreduction
+// INNERREDUCTION-SAME:    %[[INPUT:.+]]: vector<8xf32>
+// INNERREDUCTION-SAME:    %[[ACC:.+]]: f32
+func.func @one_dim_to_two_dim_innerreduction(%arg0: vector<8xf32>, %acc: f32) -> f32 {
+    // INNERREDUCTION: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<8xf32> to vector<1x8xf32>
+    // INNERREDUCTION: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
+    // INNERREDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST]] [1]
+    %0 = vector.multi_reduction <add>, %arg0, %acc [0] : vector<8xf32> to f32
+    // INNERREDUCTION: %[[EXTRACT:.+]] = vector.extract %[[RESULT]][0]
+    // INNERREDUCTION: return %[[EXTRACT]]
+    return %0 : f32
+}
+
+// INNERPARALLEL-LABEL: func @one_dim_to_two_dim_innerparallel
+// INNERPARALLEL-SAME:    %[[INPUT:.+]]: vector<2xf32>
+// INNERPARALLEL-SAME:    %[[ACC:.+]]: f32
+func.func @one_dim_to_two_dim_innerparallel(%arg0: vector<2xf32>, %acc: f32) -> f32 {
+    // INNERPARALLEL: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<2xf32> to vector<1x2xf32>
+    // INNERPARALLEL: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
+    // INNERPARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[CAST]], [1, 0]
+    // INNERPARALLEL: vector.multi_reduction <maxnumf>, %[[TRANSPOSED]], %[[BROADCAST]] [0]
+    %0 = vector.multi_reduction <maxnumf>, %arg0, %acc [0] : vector<2xf32> to f32
+    return %0 : f32
+}
+
+// INNERREDUCTION-LABEL: func @one_dim_to_two_dim_scalable
+// INNERREDUCTION-SAME:    %[[INPUT:.+]]: vector<[4]xf32>
+// INNERREDUCTION-SAME:    %[[ACC:.+]]: f32
+func.func @one_dim_to_two_dim_scalable(%arg0: vector<[4]xf32>, %acc: f32) -> f32 {
+    // INNERREDUCTION: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<[4]xf32> to vector<1x[4]xf32>
+    // INNERREDUCTION: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
+    // INNERREDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST]] [1]
+    %0 = vector.multi_reduction <add>, %arg0, %acc [0] : vector<[4]xf32> to f32
+    // INNERREDUCTION: %[[EXTRACT:.+]] = vector.extract %[[RESULT]][0]
+    // INNERREDUCTION: return %[[EXTRACT]]
+    return %0 : f32
+}
+
+// INNERREDUCTION-LABEL: func @one_dim_to_two_dim_masked
+// INNERREDUCTION-SAME:    %[[INPUT:.+]]: vector<8xf32>
+// INNERREDUCTION-SAME:    %[[ACC:.+]]: f32
+// INNERREDUCTION-SAME:    %[[MASK:.+]]: vector<8xi1>
+func.func @one_dim_to_two_dim_masked(%arg0: vector<8xf32>, %acc: f32, %mask: vector<8xi1>) -> f32 {
+    // INNERREDUCTION: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<8xf32> to vector<1x8xf32>
+    // INNERREDUCTION: %[[BROADCAST_ACC:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
+    // INNERREDUCTION: %[[BROADCAST_MASK:.+]] = vector.broadcast %[[MASK]] : vector<8xi1> to vector<1x8xi1>
+    // INNERREDUCTION: %[[RESULT:.+]] = vector.mask %[[BROADCAST_MASK]] {
+    // INNERREDUCTION:   vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST_ACC]] [1]
+    %0 = vector.mask %mask {
+      vector.multi_reduction <add>, %arg0, %acc [0] : vector<8xf32> to f32
+    } : vector<8xi1> -> f32
+    // INNERREDUCTION: %[[EXTRACT:.+]] = vector.extract %[[RESULT]][0]
+    // INNERREDUCTION: return %[[EXTRACT]]
+    return %0 : f32
+}
+
+module attributes {transform.with_named_sequence} {
+  transform.named_sequence @innerreduction(%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_multi_reduction_transformation lowering_strategy = "innerreduction"
+    } : !transform.op<"func.func">
+    transform.yield
+  }
+
+  transform.named_sequence @innerparallel(%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_multi_reduction_transformation lowering_strategy = "innerparallel"
+    } : !transform.op<"func.func">
+    transform.yield
+  }
+}

>From f3e3a3c927d1370023170ca85841c9ddbe084cf6 Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Wed, 11 Feb 2026 10:58:53 -0500
Subject: [PATCH 03/16] [mlir][vector] Add test for python bindings.

Adds tests for ApplyLowerMultiReductionTransformationPatternsOp's python
bindings.
---
 mlir/test/python/dialects/transform_vector_ext.py | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/mlir/test/python/dialects/transform_vector_ext.py b/mlir/test/python/dialects/transform_vector_ext.py
index 2bcb2a2ac58123..6166007673c2e7 100644
--- a/mlir/test/python/dialects/transform_vector_ext.py
+++ b/mlir/test/python/dialects/transform_vector_ext.py
@@ -100,6 +100,14 @@ def enum_configurable_patterns():
         lowering_strategy=vector.VectorMultiReductionLowering.InnerReduction
     )
 
+    # CHECK: transform.apply_patterns.vector.lower_multi_reduction_transformation
+    vector.ApplyLowerMultiReductionTransformationPatternsOp()
+    # CHECK: transform.apply_patterns.vector.lower_multi_reduction_transformation
+    # CHECK-SAME: lowering_strategy = innerreduction
+    vector.ApplyLowerMultiReductionTransformationPatternsOp(
+        lowering_strategy=vector.VectorMultiReductionLowering.InnerReduction
+    )
+
     # CHECK: transform.apply_patterns.vector.lower_transpose
     vector.ApplyLowerTransposePatternsOp()
     # CHECK: transform.apply_patterns.vector.lower_transpose

>From 2e954ee260370058e7c562218f63fe5d6b8f5249 Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Wed, 11 Feb 2026 14:48:39 -0500
Subject: [PATCH 04/16] Rename

---
 .../Dialect/Vector/TransformOps/VectorTransformOps.td     | 4 ++--
 .../Dialect/Vector/TransformOps/VectorTransformOps.cpp    | 2 +-
 .../Vector/vector-multi-reduction-transformation.mlir     | 4 ++--
 mlir/test/python/dialects/transform_vector_ext.py         | 8 ++++----
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td b/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td
index dfe54835ac89f1..0cc8058d99b996 100644
--- a/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td
+++ b/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td
@@ -243,8 +243,8 @@ def ApplyLowerMultiReductionPatternsOp : Op<Transform_Dialect,
   }];
 }
 
-def ApplyLowerMultiReductionTransformationPatternsOp : Op<Transform_Dialect,
-    "apply_patterns.vector.lower_multi_reduction_transformation",
+def ApplyReorderMultiReductionDimsPatternsOp : Op<Transform_Dialect,
+    "apply_patterns.vector.reorder_multi_reduction_dims",
     [DeclareOpInterfaceMethods<PatternDescriptorOpInterface>]> {
   let description = [{
     Indicates that vector multi_reduction-like operations should be
diff --git a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp
index 3e9af181195c33..8b63a1c60c56b8 100644
--- a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp
+++ b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp
@@ -138,7 +138,7 @@ void transform::ApplyLowerMultiReductionPatternsOp::populatePatterns(
       patterns, vectorTransformOptions.vectorMultiReductionLowering);
 }
 
-void transform::ApplyLowerMultiReductionTransformationPatternsOp::
+void transform::ApplyReorderMultiReductionDimsPatternsOp::
     populatePatterns(RewritePatternSet &patterns) {
   vector::VectorTransformsOptions vectorTransformOptions;
   vectorTransformOptions.setVectorMultiReductionLowering(getLoweringStrategy());
diff --git a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
index 24009821a38b12..f849f2b88a1666 100644
--- a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
+++ b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
@@ -109,7 +109,7 @@ module attributes {transform.with_named_sequence} {
   transform.named_sequence @innerreduction(%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_multi_reduction_transformation lowering_strategy = "innerreduction"
+      transform.apply_patterns.vector.reorder_multi_reduction_dims lowering_strategy = "innerreduction"
     } : !transform.op<"func.func">
     transform.yield
   }
@@ -117,7 +117,7 @@ module attributes {transform.with_named_sequence} {
   transform.named_sequence @innerparallel(%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_multi_reduction_transformation lowering_strategy = "innerparallel"
+      transform.apply_patterns.vector.reorder_multi_reduction_dims lowering_strategy = "innerparallel"
     } : !transform.op<"func.func">
     transform.yield
   }
diff --git a/mlir/test/python/dialects/transform_vector_ext.py b/mlir/test/python/dialects/transform_vector_ext.py
index 6166007673c2e7..04ff316e76ec71 100644
--- a/mlir/test/python/dialects/transform_vector_ext.py
+++ b/mlir/test/python/dialects/transform_vector_ext.py
@@ -100,11 +100,11 @@ def enum_configurable_patterns():
         lowering_strategy=vector.VectorMultiReductionLowering.InnerReduction
     )
 
-    # CHECK: transform.apply_patterns.vector.lower_multi_reduction_transformation
-    vector.ApplyLowerMultiReductionTransformationPatternsOp()
-    # CHECK: transform.apply_patterns.vector.lower_multi_reduction_transformation
+    # CHECK: transform.apply_patterns.vector.reorder_multi_reduction_dims
+    vector.ApplyReorderMultiReductionDimsPatternsOp()
+    # CHECK: transform.apply_patterns.vector.reorder_multi_reduction_dims
     # CHECK-SAME: lowering_strategy = innerreduction
-    vector.ApplyLowerMultiReductionTransformationPatternsOp(
+    vector.ApplyReorderMultiReductionDimsPatternsOp(
         lowering_strategy=vector.VectorMultiReductionLowering.InnerReduction
     )
 

>From 0e279994d08790324578100749edab02dc827ef5 Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Wed, 11 Feb 2026 14:53:13 -0500
Subject: [PATCH 05/16] Style

---
 mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp
index 8b63a1c60c56b8..de21a5b86388dd 100644
--- a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp
+++ b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp
@@ -138,8 +138,8 @@ void transform::ApplyLowerMultiReductionPatternsOp::populatePatterns(
       patterns, vectorTransformOptions.vectorMultiReductionLowering);
 }
 
-void transform::ApplyReorderMultiReductionDimsPatternsOp::
-    populatePatterns(RewritePatternSet &patterns) {
+void transform::ApplyReorderMultiReductionDimsPatternsOp::populatePatterns(
+    RewritePatternSet &patterns) {
   vector::VectorTransformsOptions vectorTransformOptions;
   vectorTransformOptions.setVectorMultiReductionLowering(getLoweringStrategy());
   vector::populateVectorMultiReductionTransformationPatterns(

>From c8a035a6d293a7010fabfbf70669b42c5f5285bc Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Thu, 12 Feb 2026 14:28:20 -0500
Subject: [PATCH 06/16] Rename CHECK commands

---
 ...vector-multi-reduction-transformation.mlir | 128 +++++++++---------
 1 file changed, 64 insertions(+), 64 deletions(-)

diff --git a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
index f849f2b88a1666..9726d809f0410d 100644
--- a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
+++ b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
@@ -1,107 +1,107 @@
-// RUN: mlir-opt %s --transform-interpreter='entry-point=innerreduction' | FileCheck %s --check-prefix=INNERREDUCTION
-// RUN: mlir-opt %s --transform-interpreter='entry-point=innerparallel' | FileCheck %s --check-prefix=INNERPARALLEL
+// RUN: mlir-opt %s --transform-interpreter='entry-point=innerreduction' | FileCheck %s --check-prefix=INNER_REDUCTION
+// RUN: mlir-opt %s --transform-interpreter='entry-point=innerparallel' | FileCheck %s --check-prefix=INNER_PARALLEL
 
-// INNERREDUCTION-LABEL: func @transpose_reduction_dims_innerreduction
-// INNERREDUCTION-SAME:    %[[INPUT:.+]]: vector<3x2x4xf32>
-// INNERREDUCTION-SAME:    %[[ACC:.+]]: vector<2x4xf32>
+// INNER_REDUCTION-LABEL: func @transpose_reduction_dims_innerreduction
+// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<3x2x4xf32>
+// INNER_REDUCTION-SAME:    %[[ACC:.+]]: vector<2x4xf32>
 func.func @transpose_reduction_dims_innerreduction(%arg0: vector<3x2x4xf32>, %acc: vector<2x4xf32>) -> vector<2x4xf32> {
-    // INNERREDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [1, 2, 0]
-    // INNERREDUCTION: %[[RESULT:.+]] = vector.multi_reduction <mul>, %[[TRANSPOSED]], %[[ACC]] [2]
+    // INNER_REDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [1, 2, 0]
+    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <mul>, %[[TRANSPOSED]], %[[ACC]] [2]
     %0 = vector.multi_reduction <mul>, %arg0, %acc [0] : vector<3x2x4xf32> to vector<2x4xf32>
-    // INNERREDUCTION: return %[[RESULT]]
+    // INNER_REDUCTION: return %[[RESULT]]
     return %0 : vector<2x4xf32>
 }
 
-// INNERPARALLEL-LABEL: func @transpose_reduction_dims_innerparallel
-// INNERPARALLEL-SAME:    %[[INPUT:.+]]: vector<3x2x4xf32>
-// INNERPARALLEL-SAME:    %[[ACC:.+]]: vector<3x2xf32>
+// INNER_PARALLEL-LABEL: func @transpose_reduction_dims_innerparallel
+// INNER_PARALLEL-SAME:    %[[INPUT:.+]]: vector<3x2x4xf32>
+// INNER_PARALLEL-SAME:    %[[ACC:.+]]: vector<3x2xf32>
 func.func @transpose_reduction_dims_innerparallel(%arg0: vector<3x2x4xf32>, %acc: vector<3x2xf32>) -> vector<3x2xf32> {
-    // INNERPARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [2, 0, 1]
-    // INNERPARALLEL: vector.multi_reduction <mul>, %[[TRANSPOSED]], %[[ACC]] [0]
+    // INNER_PARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [2, 0, 1]
+    // INNER_PARALLEL: vector.multi_reduction <mul>, %[[TRANSPOSED]], %[[ACC]] [0]
     %0 = vector.multi_reduction <mul>, %arg0, %acc [2] : vector<3x2x4xf32> to vector<3x2xf32>
     return %0 : vector<3x2xf32>
 }
 
-// INNERREDUCTION-LABEL: func @transpose_multi_reduction_dims
-// INNERREDUCTION-SAME:    %[[INPUT:.+]]: vector<2x3x4x5xf32>
-// INNERREDUCTION-SAME:    %[[ACC:.+]]: vector<2x5xf32>
+// INNER_REDUCTION-LABEL: func @transpose_multi_reduction_dims
+// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<2x3x4x5xf32>
+// INNER_REDUCTION-SAME:    %[[ACC:.+]]: vector<2x5xf32>
 func.func @transpose_multi_reduction_dims(%arg0: vector<2x3x4x5xf32>, %acc: vector<2x5xf32>) -> vector<2x5xf32> {
-    // INNERREDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [0, 3, 1, 2]
-    // INNERREDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [2, 3]
+    // INNER_REDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [0, 3, 1, 2]
+    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [2, 3]
     %0 = vector.multi_reduction <add>, %arg0, %acc [1, 2] : vector<2x3x4x5xf32> to vector<2x5xf32>
-    // INNERREDUCTION: return %[[RESULT]]
+    // INNER_REDUCTION: return %[[RESULT]]
     return %0 : vector<2x5xf32>
 }
 
-// INNERREDUCTION-LABEL: func @transpose_parallel_middle
-// INNERREDUCTION-SAME:    %[[INPUT:.+]]: vector<3x4x5xf32>
-// INNERREDUCTION-SAME:    %[[ACC:.+]]: vector<4xf32>
-// INNERPARALLEL-LABEL: func @transpose_parallel_middle
-// INNERPARALLEL-SAME:    %[[INPUT:.+]]: vector<3x4x5xf32>
-// INNERPARALLEL-SAME:    %[[ACC:.+]]: vector<4xf32>
+// INNER_REDUCTION-LABEL: func @transpose_parallel_middle
+// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<3x4x5xf32>
+// INNER_REDUCTION-SAME:    %[[ACC:.+]]: vector<4xf32>
+// INNER_PARALLEL-LABEL: func @transpose_parallel_middle
+// INNER_PARALLEL-SAME:    %[[INPUT:.+]]: vector<3x4x5xf32>
+// INNER_PARALLEL-SAME:    %[[ACC:.+]]: vector<4xf32>
 func.func @transpose_parallel_middle(%arg0: vector<3x4x5xf32>, %acc: vector<4xf32>) -> vector<4xf32> {
-    // INNERREDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [1, 0, 2]
-    // INNERREDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [1, 2]
-    // INNERPARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [0, 2, 1]
-    // INNERPARALLEL: vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [0, 1]
+    // INNER_REDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [1, 0, 2]
+    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [1, 2]
+    // INNER_PARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [0, 2, 1]
+    // INNER_PARALLEL: vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [0, 1]
     %0 = vector.multi_reduction <add>, %arg0, %acc [0, 2] : vector<3x4x5xf32> to vector<4xf32>
-    // INNERREDUCTION: return %[[RESULT]]
+    // INNER_REDUCTION: return %[[RESULT]]
     return %0 : vector<4xf32>
 }
 
-// INNERREDUCTION-LABEL: func @one_dim_to_two_dim_innerreduction
-// INNERREDUCTION-SAME:    %[[INPUT:.+]]: vector<8xf32>
-// INNERREDUCTION-SAME:    %[[ACC:.+]]: f32
+// INNER_REDUCTION-LABEL: func @one_dim_to_two_dim_innerreduction
+// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<8xf32>
+// INNER_REDUCTION-SAME:    %[[ACC:.+]]: f32
 func.func @one_dim_to_two_dim_innerreduction(%arg0: vector<8xf32>, %acc: f32) -> f32 {
-    // INNERREDUCTION: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<8xf32> to vector<1x8xf32>
-    // INNERREDUCTION: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
-    // INNERREDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST]] [1]
+    // INNER_REDUCTION: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<8xf32> to vector<1x8xf32>
+    // INNER_REDUCTION: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
+    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST]] [1]
     %0 = vector.multi_reduction <add>, %arg0, %acc [0] : vector<8xf32> to f32
-    // INNERREDUCTION: %[[EXTRACT:.+]] = vector.extract %[[RESULT]][0]
-    // INNERREDUCTION: return %[[EXTRACT]]
+    // INNER_REDUCTION: %[[EXTRACT:.+]] = vector.extract %[[RESULT]][0]
+    // INNER_REDUCTION: return %[[EXTRACT]]
     return %0 : f32
 }
 
-// INNERPARALLEL-LABEL: func @one_dim_to_two_dim_innerparallel
-// INNERPARALLEL-SAME:    %[[INPUT:.+]]: vector<2xf32>
-// INNERPARALLEL-SAME:    %[[ACC:.+]]: f32
+// INNER_PARALLEL-LABEL: func @one_dim_to_two_dim_innerparallel
+// INNER_PARALLEL-SAME:    %[[INPUT:.+]]: vector<2xf32>
+// INNER_PARALLEL-SAME:    %[[ACC:.+]]: f32
 func.func @one_dim_to_two_dim_innerparallel(%arg0: vector<2xf32>, %acc: f32) -> f32 {
-    // INNERPARALLEL: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<2xf32> to vector<1x2xf32>
-    // INNERPARALLEL: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
-    // INNERPARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[CAST]], [1, 0]
-    // INNERPARALLEL: vector.multi_reduction <maxnumf>, %[[TRANSPOSED]], %[[BROADCAST]] [0]
+    // INNER_PARALLEL: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<2xf32> to vector<1x2xf32>
+    // INNER_PARALLEL: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
+    // INNER_PARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[CAST]], [1, 0]
+    // INNER_PARALLEL: vector.multi_reduction <maxnumf>, %[[TRANSPOSED]], %[[BROADCAST]] [0]
     %0 = vector.multi_reduction <maxnumf>, %arg0, %acc [0] : vector<2xf32> to f32
     return %0 : f32
 }
 
-// INNERREDUCTION-LABEL: func @one_dim_to_two_dim_scalable
-// INNERREDUCTION-SAME:    %[[INPUT:.+]]: vector<[4]xf32>
-// INNERREDUCTION-SAME:    %[[ACC:.+]]: f32
+// INNER_REDUCTION-LABEL: func @one_dim_to_two_dim_scalable
+// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<[4]xf32>
+// INNER_REDUCTION-SAME:    %[[ACC:.+]]: f32
 func.func @one_dim_to_two_dim_scalable(%arg0: vector<[4]xf32>, %acc: f32) -> f32 {
-    // INNERREDUCTION: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<[4]xf32> to vector<1x[4]xf32>
-    // INNERREDUCTION: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
-    // INNERREDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST]] [1]
+    // INNER_REDUCTION: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<[4]xf32> to vector<1x[4]xf32>
+    // INNER_REDUCTION: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
+    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST]] [1]
     %0 = vector.multi_reduction <add>, %arg0, %acc [0] : vector<[4]xf32> to f32
-    // INNERREDUCTION: %[[EXTRACT:.+]] = vector.extract %[[RESULT]][0]
-    // INNERREDUCTION: return %[[EXTRACT]]
+    // INNER_REDUCTION: %[[EXTRACT:.+]] = vector.extract %[[RESULT]][0]
+    // INNER_REDUCTION: return %[[EXTRACT]]
     return %0 : f32
 }
 
-// INNERREDUCTION-LABEL: func @one_dim_to_two_dim_masked
-// INNERREDUCTION-SAME:    %[[INPUT:.+]]: vector<8xf32>
-// INNERREDUCTION-SAME:    %[[ACC:.+]]: f32
-// INNERREDUCTION-SAME:    %[[MASK:.+]]: vector<8xi1>
+// INNER_REDUCTION-LABEL: func @one_dim_to_two_dim_masked
+// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<8xf32>
+// INNER_REDUCTION-SAME:    %[[ACC:.+]]: f32
+// INNER_REDUCTION-SAME:    %[[MASK:.+]]: vector<8xi1>
 func.func @one_dim_to_two_dim_masked(%arg0: vector<8xf32>, %acc: f32, %mask: vector<8xi1>) -> f32 {
-    // INNERREDUCTION: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<8xf32> to vector<1x8xf32>
-    // INNERREDUCTION: %[[BROADCAST_ACC:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
-    // INNERREDUCTION: %[[BROADCAST_MASK:.+]] = vector.broadcast %[[MASK]] : vector<8xi1> to vector<1x8xi1>
-    // INNERREDUCTION: %[[RESULT:.+]] = vector.mask %[[BROADCAST_MASK]] {
-    // INNERREDUCTION:   vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST_ACC]] [1]
+    // INNER_REDUCTION: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<8xf32> to vector<1x8xf32>
+    // INNER_REDUCTION: %[[BROADCAST_ACC:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
+    // INNER_REDUCTION: %[[BROADCAST_MASK:.+]] = vector.broadcast %[[MASK]] : vector<8xi1> to vector<1x8xi1>
+    // INNER_REDUCTION: %[[RESULT:.+]] = vector.mask %[[BROADCAST_MASK]] {
+    // INNER_REDUCTION:   vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST_ACC]] [1]
     %0 = vector.mask %mask {
       vector.multi_reduction <add>, %arg0, %acc [0] : vector<8xf32> to f32
     } : vector<8xi1> -> f32
-    // INNERREDUCTION: %[[EXTRACT:.+]] = vector.extract %[[RESULT]][0]
-    // INNERREDUCTION: return %[[EXTRACT]]
+    // INNER_REDUCTION: %[[EXTRACT:.+]] = vector.extract %[[RESULT]][0]
+    // INNER_REDUCTION: return %[[EXTRACT]]
     return %0 : f32
 }
 

>From ce9a1934ee156fc9701b514a40039fcc4c516fef Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Thu, 12 Feb 2026 14:29:45 -0500
Subject: [PATCH 07/16] rename transpose_reduction_dims_innerreduction to
 inner_reduction_to_inner_parallel

---
 .../Dialect/Vector/vector-multi-reduction-transformation.mlir | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
index 9726d809f0410d..0e4e3961ea32fc 100644
--- a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
+++ b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
@@ -1,10 +1,10 @@
 // RUN: mlir-opt %s --transform-interpreter='entry-point=innerreduction' | FileCheck %s --check-prefix=INNER_REDUCTION
 // RUN: mlir-opt %s --transform-interpreter='entry-point=innerparallel' | FileCheck %s --check-prefix=INNER_PARALLEL
 
-// INNER_REDUCTION-LABEL: func @transpose_reduction_dims_innerreduction
+// INNER_REDUCTION-LABEL: func @inner_reduction_to_inner_parallel
 // INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<3x2x4xf32>
 // INNER_REDUCTION-SAME:    %[[ACC:.+]]: vector<2x4xf32>
-func.func @transpose_reduction_dims_innerreduction(%arg0: vector<3x2x4xf32>, %acc: vector<2x4xf32>) -> vector<2x4xf32> {
+func.func @inner_reduction_to_inner_parallel(%arg0: vector<3x2x4xf32>, %acc: vector<2x4xf32>) -> vector<2x4xf32> {
     // INNER_REDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [1, 2, 0]
     // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <mul>, %[[TRANSPOSED]], %[[ACC]] [2]
     %0 = vector.multi_reduction <mul>, %arg0, %acc [0] : vector<3x2x4xf32> to vector<2x4xf32>

>From 9935297401a7d0927410968074816b111c68c1a6 Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Thu, 12 Feb 2026 14:31:08 -0500
Subject: [PATCH 08/16] Rename transpose_reduction_dims_innerparallel to
 inner_parallel_to_inner_reduction

---
 .../Dialect/Vector/vector-multi-reduction-transformation.mlir | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
index 0e4e3961ea32fc..4c5e81680ceb2c 100644
--- a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
+++ b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
@@ -12,10 +12,10 @@ func.func @inner_reduction_to_inner_parallel(%arg0: vector<3x2x4xf32>, %acc: vec
     return %0 : vector<2x4xf32>
 }
 
-// INNER_PARALLEL-LABEL: func @transpose_reduction_dims_innerparallel
+// INNER_PARALLEL-LABEL: func @inner_parallel_to_inner_reduction
 // INNER_PARALLEL-SAME:    %[[INPUT:.+]]: vector<3x2x4xf32>
 // INNER_PARALLEL-SAME:    %[[ACC:.+]]: vector<3x2xf32>
-func.func @transpose_reduction_dims_innerparallel(%arg0: vector<3x2x4xf32>, %acc: vector<3x2xf32>) -> vector<3x2xf32> {
+func.func @inner_parallel_to_inner_reduction(%arg0: vector<3x2x4xf32>, %acc: vector<3x2xf32>) -> vector<3x2xf32> {
     // INNER_PARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [2, 0, 1]
     // INNER_PARALLEL: vector.multi_reduction <mul>, %[[TRANSPOSED]], %[[ACC]] [0]
     %0 = vector.multi_reduction <mul>, %arg0, %acc [2] : vector<3x2x4xf32> to vector<3x2xf32>

>From eb7810f21597e878b16aca0867156e4997d2c911 Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Thu, 12 Feb 2026 14:33:51 -0500
Subject: [PATCH 09/16] Use ALL label

---
 .../vector-multi-reduction-transformation.mlir      | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
index 4c5e81680ceb2c..db04c182f59bda 100644
--- a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
+++ b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
@@ -33,19 +33,16 @@ func.func @transpose_multi_reduction_dims(%arg0: vector<2x3x4x5xf32>, %acc: vect
     return %0 : vector<2x5xf32>
 }
 
-// INNER_REDUCTION-LABEL: func @transpose_parallel_middle
-// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<3x4x5xf32>
-// INNER_REDUCTION-SAME:    %[[ACC:.+]]: vector<4xf32>
-// INNER_PARALLEL-LABEL: func @transpose_parallel_middle
-// INNER_PARALLEL-SAME:    %[[INPUT:.+]]: vector<3x4x5xf32>
-// INNER_PARALLEL-SAME:    %[[ACC:.+]]: vector<4xf32>
+// ALL-LABEL: func @transpose_parallel_middle
+// ALL-SAME:    %[[INPUT:.+]]: vector<3x4x5xf32>
+// ALL-SAME:    %[[ACC:.+]]: vector<4xf32>
 func.func @transpose_parallel_middle(%arg0: vector<3x4x5xf32>, %acc: vector<4xf32>) -> vector<4xf32> {
     // INNER_REDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [1, 0, 2]
     // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [1, 2]
     // INNER_PARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [0, 2, 1]
-    // INNER_PARALLEL: vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [0, 1]
+    // INNER_PARALLEL: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [0, 1]
     %0 = vector.multi_reduction <add>, %arg0, %acc [0, 2] : vector<3x4x5xf32> to vector<4xf32>
-    // INNER_REDUCTION: return %[[RESULT]]
+    // ALL: return %[[RESULT]]
     return %0 : vector<4xf32>
 }
 

>From 464057c362ba5d37b4a8132049d25ecdb8a9dd8d Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Thu, 12 Feb 2026 14:39:24 -0500
Subject: [PATCH 10/16] Rename ApplyReorderMultiReductionDimsPatternsOp to
 ApplyReorderAndExpandMultiReductionPatternsOp

---
 .../Dialect/Vector/TransformOps/VectorTransformOps.td     | 4 ++--
 .../Dialect/Vector/TransformOps/VectorTransformOps.cpp    | 2 +-
 .../Vector/vector-multi-reduction-transformation.mlir     | 4 ++--
 mlir/test/python/dialects/transform_vector_ext.py         | 8 ++++----
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td b/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td
index 0cc8058d99b996..22770168942cff 100644
--- a/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td
+++ b/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td
@@ -243,8 +243,8 @@ def ApplyLowerMultiReductionPatternsOp : Op<Transform_Dialect,
   }];
 }
 
-def ApplyReorderMultiReductionDimsPatternsOp : Op<Transform_Dialect,
-    "apply_patterns.vector.reorder_multi_reduction_dims",
+def ApplyReorderAndExpandMultiReductionPatternsOp: Op<Transform_Dialect,
+    "apply_patterns.vector.reorder_and_expand_multi_reduction_dims",
     [DeclareOpInterfaceMethods<PatternDescriptorOpInterface>]> {
   let description = [{
     Indicates that vector multi_reduction-like operations should be
diff --git a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp
index de21a5b86388dd..5c4aa72b6f60b1 100644
--- a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp
+++ b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp
@@ -138,7 +138,7 @@ void transform::ApplyLowerMultiReductionPatternsOp::populatePatterns(
       patterns, vectorTransformOptions.vectorMultiReductionLowering);
 }
 
-void transform::ApplyReorderMultiReductionDimsPatternsOp::populatePatterns(
+void transform::ApplyReorderAndExpandMultiReductionPatternsOp::populatePatterns(
     RewritePatternSet &patterns) {
   vector::VectorTransformsOptions vectorTransformOptions;
   vectorTransformOptions.setVectorMultiReductionLowering(getLoweringStrategy());
diff --git a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
index db04c182f59bda..e2ab38406f8fed 100644
--- a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
+++ b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
@@ -106,7 +106,7 @@ module attributes {transform.with_named_sequence} {
   transform.named_sequence @innerreduction(%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.reorder_multi_reduction_dims lowering_strategy = "innerreduction"
+      transform.apply_patterns.vector.reorder_and_expand_multi_reduction_dims lowering_strategy = "innerreduction"
     } : !transform.op<"func.func">
     transform.yield
   }
@@ -114,7 +114,7 @@ module attributes {transform.with_named_sequence} {
   transform.named_sequence @innerparallel(%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.reorder_multi_reduction_dims lowering_strategy = "innerparallel"
+      transform.apply_patterns.vector.reorder_and_expand_multi_reduction_dims lowering_strategy = "innerparallel"
     } : !transform.op<"func.func">
     transform.yield
   }
diff --git a/mlir/test/python/dialects/transform_vector_ext.py b/mlir/test/python/dialects/transform_vector_ext.py
index 04ff316e76ec71..0f9aab29ca5caf 100644
--- a/mlir/test/python/dialects/transform_vector_ext.py
+++ b/mlir/test/python/dialects/transform_vector_ext.py
@@ -100,11 +100,11 @@ def enum_configurable_patterns():
         lowering_strategy=vector.VectorMultiReductionLowering.InnerReduction
     )
 
-    # CHECK: transform.apply_patterns.vector.reorder_multi_reduction_dims
-    vector.ApplyReorderMultiReductionDimsPatternsOp()
-    # CHECK: transform.apply_patterns.vector.reorder_multi_reduction_dims
+    # CHECK: transform.apply_patterns.vector.reorder_and_expand_multi_reduction_dims
+    vector.ApplyReorderAndExpandMultiReductionPatternsOp()
+    # CHECK: transform.apply_patterns.vector.reorder_and_expand_multi_reduction_dims
     # CHECK-SAME: lowering_strategy = innerreduction
-    vector.ApplyReorderMultiReductionDimsPatternsOp(
+    vector.ApplyReorderAndExpandMultiReductionPatternsOp(
         lowering_strategy=vector.VectorMultiReductionLowering.InnerReduction
     )
 

>From 324155e9638fb45d43e4bfcf1583196c0960f369 Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Thu, 12 Feb 2026 14:58:57 -0500
Subject: [PATCH 11/16] Reuse same input

---
 ...vector-multi-reduction-transformation.mlir | 35 +++++++------------
 1 file changed, 13 insertions(+), 22 deletions(-)

diff --git a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
index e2ab38406f8fed..ae8f10c6abe135 100644
--- a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
+++ b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
@@ -1,5 +1,5 @@
-// RUN: mlir-opt %s --transform-interpreter='entry-point=innerreduction' | FileCheck %s --check-prefix=INNER_REDUCTION
-// RUN: mlir-opt %s --transform-interpreter='entry-point=innerparallel' | FileCheck %s --check-prefix=INNER_PARALLEL
+// RUN: mlir-opt %s --transform-interpreter='entry-point=innerreduction' | FileCheck %s --check-prefix=INNER_REDUCTION,ALL
+// RUN: mlir-opt %s --transform-interpreter='entry-point=innerparallel' | FileCheck %s --check-prefix=INNER_PARALLEL,ALL
 
 // INNER_REDUCTION-LABEL: func @inner_reduction_to_inner_parallel
 // INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<3x2x4xf32>
@@ -46,28 +46,19 @@ func.func @transpose_parallel_middle(%arg0: vector<3x4x5xf32>, %acc: vector<4xf3
     return %0 : vector<4xf32>
 }
 
-// INNER_REDUCTION-LABEL: func @one_dim_to_two_dim_innerreduction
-// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<8xf32>
-// INNER_REDUCTION-SAME:    %[[ACC:.+]]: f32
-func.func @one_dim_to_two_dim_innerreduction(%arg0: vector<8xf32>, %acc: f32) -> f32 {
-    // INNER_REDUCTION: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<8xf32> to vector<1x8xf32>
-    // INNER_REDUCTION: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
+// ALL-LABEL: func @one_dim_to_two_dim
+// ALL-SAME:    %[[INPUT:.+]]: vector<8xf32>
+// ALL-SAME:    %[[ACC:.+]]: f32
+func.func @one_dim_to_two_dim(%arg0: vector<8xf32>, %acc: f32) -> f32 {
+    // ALL: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<8xf32> to vector<1x8xf32>
+    // ALL: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
     // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST]] [1]
-    %0 = vector.multi_reduction <add>, %arg0, %acc [0] : vector<8xf32> to f32
-    // INNER_REDUCTION: %[[EXTRACT:.+]] = vector.extract %[[RESULT]][0]
-    // INNER_REDUCTION: return %[[EXTRACT]]
-    return %0 : f32
-}
-
-// INNER_PARALLEL-LABEL: func @one_dim_to_two_dim_innerparallel
-// INNER_PARALLEL-SAME:    %[[INPUT:.+]]: vector<2xf32>
-// INNER_PARALLEL-SAME:    %[[ACC:.+]]: f32
-func.func @one_dim_to_two_dim_innerparallel(%arg0: vector<2xf32>, %acc: f32) -> f32 {
-    // INNER_PARALLEL: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<2xf32> to vector<1x2xf32>
-    // INNER_PARALLEL: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
+    // INNER_REDUCTION: %[[SCALAR:.+]] = vector.extract %[[RESULT]][0]
     // INNER_PARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[CAST]], [1, 0]
-    // INNER_PARALLEL: vector.multi_reduction <maxnumf>, %[[TRANSPOSED]], %[[BROADCAST]] [0]
-    %0 = vector.multi_reduction <maxnumf>, %arg0, %acc [0] : vector<2xf32> to f32
+    // INNER_PARALLEL: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[BROADCAST]] [0]
+    // INNER_PARALLEL: %[[SCALAR:.+]] = vector.extract %[[RESULT]][0]
+    %0 = vector.multi_reduction <add>, %arg0, %acc [0] : vector<8xf32> to f32
+    // ALL: return %[[SCALAR]]
     return %0 : f32
 }
 

>From c1e3e8f7050ddfdbf77f70a93ea8ce6ea6c42852 Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Thu, 12 Feb 2026 15:16:22 -0500
Subject: [PATCH 12/16] Rename file

---
 ...or-multi-reduction-reorder-and-expand.mlir | 112 ++++++++++++++++++
 1 file changed, 112 insertions(+)
 create mode 100644 mlir/test/Dialect/Vector/vector-multi-reduction-reorder-and-expand.mlir

diff --git a/mlir/test/Dialect/Vector/vector-multi-reduction-reorder-and-expand.mlir b/mlir/test/Dialect/Vector/vector-multi-reduction-reorder-and-expand.mlir
new file mode 100644
index 00000000000000..ae8f10c6abe135
--- /dev/null
+++ b/mlir/test/Dialect/Vector/vector-multi-reduction-reorder-and-expand.mlir
@@ -0,0 +1,112 @@
+// RUN: mlir-opt %s --transform-interpreter='entry-point=innerreduction' | FileCheck %s --check-prefix=INNER_REDUCTION,ALL
+// RUN: mlir-opt %s --transform-interpreter='entry-point=innerparallel' | FileCheck %s --check-prefix=INNER_PARALLEL,ALL
+
+// INNER_REDUCTION-LABEL: func @inner_reduction_to_inner_parallel
+// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<3x2x4xf32>
+// INNER_REDUCTION-SAME:    %[[ACC:.+]]: vector<2x4xf32>
+func.func @inner_reduction_to_inner_parallel(%arg0: vector<3x2x4xf32>, %acc: vector<2x4xf32>) -> vector<2x4xf32> {
+    // INNER_REDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [1, 2, 0]
+    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <mul>, %[[TRANSPOSED]], %[[ACC]] [2]
+    %0 = vector.multi_reduction <mul>, %arg0, %acc [0] : vector<3x2x4xf32> to vector<2x4xf32>
+    // INNER_REDUCTION: return %[[RESULT]]
+    return %0 : vector<2x4xf32>
+}
+
+// INNER_PARALLEL-LABEL: func @inner_parallel_to_inner_reduction
+// INNER_PARALLEL-SAME:    %[[INPUT:.+]]: vector<3x2x4xf32>
+// INNER_PARALLEL-SAME:    %[[ACC:.+]]: vector<3x2xf32>
+func.func @inner_parallel_to_inner_reduction(%arg0: vector<3x2x4xf32>, %acc: vector<3x2xf32>) -> vector<3x2xf32> {
+    // INNER_PARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [2, 0, 1]
+    // INNER_PARALLEL: vector.multi_reduction <mul>, %[[TRANSPOSED]], %[[ACC]] [0]
+    %0 = vector.multi_reduction <mul>, %arg0, %acc [2] : vector<3x2x4xf32> to vector<3x2xf32>
+    return %0 : vector<3x2xf32>
+}
+
+// INNER_REDUCTION-LABEL: func @transpose_multi_reduction_dims
+// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<2x3x4x5xf32>
+// INNER_REDUCTION-SAME:    %[[ACC:.+]]: vector<2x5xf32>
+func.func @transpose_multi_reduction_dims(%arg0: vector<2x3x4x5xf32>, %acc: vector<2x5xf32>) -> vector<2x5xf32> {
+    // INNER_REDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [0, 3, 1, 2]
+    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [2, 3]
+    %0 = vector.multi_reduction <add>, %arg0, %acc [1, 2] : vector<2x3x4x5xf32> to vector<2x5xf32>
+    // INNER_REDUCTION: return %[[RESULT]]
+    return %0 : vector<2x5xf32>
+}
+
+// ALL-LABEL: func @transpose_parallel_middle
+// ALL-SAME:    %[[INPUT:.+]]: vector<3x4x5xf32>
+// ALL-SAME:    %[[ACC:.+]]: vector<4xf32>
+func.func @transpose_parallel_middle(%arg0: vector<3x4x5xf32>, %acc: vector<4xf32>) -> vector<4xf32> {
+    // INNER_REDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [1, 0, 2]
+    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [1, 2]
+    // INNER_PARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [0, 2, 1]
+    // INNER_PARALLEL: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [0, 1]
+    %0 = vector.multi_reduction <add>, %arg0, %acc [0, 2] : vector<3x4x5xf32> to vector<4xf32>
+    // ALL: return %[[RESULT]]
+    return %0 : vector<4xf32>
+}
+
+// ALL-LABEL: func @one_dim_to_two_dim
+// ALL-SAME:    %[[INPUT:.+]]: vector<8xf32>
+// ALL-SAME:    %[[ACC:.+]]: f32
+func.func @one_dim_to_two_dim(%arg0: vector<8xf32>, %acc: f32) -> f32 {
+    // ALL: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<8xf32> to vector<1x8xf32>
+    // ALL: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
+    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST]] [1]
+    // INNER_REDUCTION: %[[SCALAR:.+]] = vector.extract %[[RESULT]][0]
+    // INNER_PARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[CAST]], [1, 0]
+    // INNER_PARALLEL: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[BROADCAST]] [0]
+    // INNER_PARALLEL: %[[SCALAR:.+]] = vector.extract %[[RESULT]][0]
+    %0 = vector.multi_reduction <add>, %arg0, %acc [0] : vector<8xf32> to f32
+    // ALL: return %[[SCALAR]]
+    return %0 : f32
+}
+
+// INNER_REDUCTION-LABEL: func @one_dim_to_two_dim_scalable
+// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<[4]xf32>
+// INNER_REDUCTION-SAME:    %[[ACC:.+]]: f32
+func.func @one_dim_to_two_dim_scalable(%arg0: vector<[4]xf32>, %acc: f32) -> f32 {
+    // INNER_REDUCTION: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<[4]xf32> to vector<1x[4]xf32>
+    // INNER_REDUCTION: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
+    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST]] [1]
+    %0 = vector.multi_reduction <add>, %arg0, %acc [0] : vector<[4]xf32> to f32
+    // INNER_REDUCTION: %[[EXTRACT:.+]] = vector.extract %[[RESULT]][0]
+    // INNER_REDUCTION: return %[[EXTRACT]]
+    return %0 : f32
+}
+
+// INNER_REDUCTION-LABEL: func @one_dim_to_two_dim_masked
+// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<8xf32>
+// INNER_REDUCTION-SAME:    %[[ACC:.+]]: f32
+// INNER_REDUCTION-SAME:    %[[MASK:.+]]: vector<8xi1>
+func.func @one_dim_to_two_dim_masked(%arg0: vector<8xf32>, %acc: f32, %mask: vector<8xi1>) -> f32 {
+    // INNER_REDUCTION: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<8xf32> to vector<1x8xf32>
+    // INNER_REDUCTION: %[[BROADCAST_ACC:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
+    // INNER_REDUCTION: %[[BROADCAST_MASK:.+]] = vector.broadcast %[[MASK]] : vector<8xi1> to vector<1x8xi1>
+    // INNER_REDUCTION: %[[RESULT:.+]] = vector.mask %[[BROADCAST_MASK]] {
+    // INNER_REDUCTION:   vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST_ACC]] [1]
+    %0 = vector.mask %mask {
+      vector.multi_reduction <add>, %arg0, %acc [0] : vector<8xf32> to f32
+    } : vector<8xi1> -> f32
+    // INNER_REDUCTION: %[[EXTRACT:.+]] = vector.extract %[[RESULT]][0]
+    // INNER_REDUCTION: return %[[EXTRACT]]
+    return %0 : f32
+}
+
+module attributes {transform.with_named_sequence} {
+  transform.named_sequence @innerreduction(%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.reorder_and_expand_multi_reduction_dims lowering_strategy = "innerreduction"
+    } : !transform.op<"func.func">
+    transform.yield
+  }
+
+  transform.named_sequence @innerparallel(%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.reorder_and_expand_multi_reduction_dims lowering_strategy = "innerparallel"
+    } : !transform.op<"func.func">
+    transform.yield
+  }
+}

>From bea1437351181ab42da62808fd0e3056e5902bd2 Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Tue, 17 Feb 2026 15:19:21 -0500
Subject: [PATCH 13/16] Test the return

---
 .../Vector/vector-multi-reduction-reorder-and-expand.mlir      | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/mlir/test/Dialect/Vector/vector-multi-reduction-reorder-and-expand.mlir b/mlir/test/Dialect/Vector/vector-multi-reduction-reorder-and-expand.mlir
index ae8f10c6abe135..5e2bde90d808df 100644
--- a/mlir/test/Dialect/Vector/vector-multi-reduction-reorder-and-expand.mlir
+++ b/mlir/test/Dialect/Vector/vector-multi-reduction-reorder-and-expand.mlir
@@ -17,8 +17,9 @@ func.func @inner_reduction_to_inner_parallel(%arg0: vector<3x2x4xf32>, %acc: vec
 // INNER_PARALLEL-SAME:    %[[ACC:.+]]: vector<3x2xf32>
 func.func @inner_parallel_to_inner_reduction(%arg0: vector<3x2x4xf32>, %acc: vector<3x2xf32>) -> vector<3x2xf32> {
     // INNER_PARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [2, 0, 1]
-    // INNER_PARALLEL: vector.multi_reduction <mul>, %[[TRANSPOSED]], %[[ACC]] [0]
+    // INNER_PARALLEL: %[[RESULT:.+]] = vector.multi_reduction <mul>, %[[TRANSPOSED]], %[[ACC]] [0]
     %0 = vector.multi_reduction <mul>, %arg0, %acc [2] : vector<3x2x4xf32> to vector<3x2xf32>
+    // INNER_PARALLEL: return %[[RESULT]]
     return %0 : vector<3x2xf32>
 }
 

>From dd6de094a1c595d545139e348781ac2927a14023 Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Tue, 17 Feb 2026 15:21:54 -0500
Subject: [PATCH 14/16] Delete unnecessary case

---
 .../vector-multi-reduction-reorder-and-expand.mlir    | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/mlir/test/Dialect/Vector/vector-multi-reduction-reorder-and-expand.mlir b/mlir/test/Dialect/Vector/vector-multi-reduction-reorder-and-expand.mlir
index 5e2bde90d808df..7f41f7e9e1ddc1 100644
--- a/mlir/test/Dialect/Vector/vector-multi-reduction-reorder-and-expand.mlir
+++ b/mlir/test/Dialect/Vector/vector-multi-reduction-reorder-and-expand.mlir
@@ -23,17 +23,6 @@ func.func @inner_parallel_to_inner_reduction(%arg0: vector<3x2x4xf32>, %acc: vec
     return %0 : vector<3x2xf32>
 }
 
-// INNER_REDUCTION-LABEL: func @transpose_multi_reduction_dims
-// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<2x3x4x5xf32>
-// INNER_REDUCTION-SAME:    %[[ACC:.+]]: vector<2x5xf32>
-func.func @transpose_multi_reduction_dims(%arg0: vector<2x3x4x5xf32>, %acc: vector<2x5xf32>) -> vector<2x5xf32> {
-    // INNER_REDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [0, 3, 1, 2]
-    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [2, 3]
-    %0 = vector.multi_reduction <add>, %arg0, %acc [1, 2] : vector<2x3x4x5xf32> to vector<2x5xf32>
-    // INNER_REDUCTION: return %[[RESULT]]
-    return %0 : vector<2x5xf32>
-}
-
 // ALL-LABEL: func @transpose_parallel_middle
 // ALL-SAME:    %[[INPUT:.+]]: vector<3x4x5xf32>
 // ALL-SAME:    %[[ACC:.+]]: vector<4xf32>

>From 79fca5a1292610736d3c30a5ecd4691f46595a8d Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Tue, 17 Feb 2026 15:30:55 -0500
Subject: [PATCH 15/16] Update name

---
 .../Vector/TransformOps/VectorTransformOps.td |   2 +-
 .../Vector/Transforms/LoweringPatterns.h      |   4 +-
 .../TransformOps/VectorTransformOps.cpp       |   4 +-
 .../Transforms/LowerVectorMultiReduction.cpp  |   8 +-
 ...vector-multi-reduction-transformation.mlir | 112 ------------------
 5 files changed, 9 insertions(+), 121 deletions(-)
 delete mode 100644 mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir

diff --git a/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td b/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td
index 22770168942cff..462c61df72108e 100644
--- a/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td
+++ b/mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td
@@ -252,7 +252,7 @@ def ApplyReorderAndExpandMultiReductionPatternsOp: Op<Transform_Dialect,
     outermost, and 1-D reductions are lifted to 2-D.
 
     This populates the patterns from
-    `populateVectorMultiReductionTransformationPatterns`, i.e.:
+    `populateVectorMultiReductionReorderAndExpandPatterns`, i.e.:
     * `InnerOuterDimReductionConversion`
     * `OneDimMultiReductionToTwoDim`
   }];
diff --git a/mlir/include/mlir/Dialect/Vector/Transforms/LoweringPatterns.h b/mlir/include/mlir/Dialect/Vector/Transforms/LoweringPatterns.h
index 8126852107afd6..33487a9d8d6e0e 100644
--- a/mlir/include/mlir/Dialect/Vector/Transforms/LoweringPatterns.h
+++ b/mlir/include/mlir/Dialect/Vector/Transforms/LoweringPatterns.h
@@ -72,7 +72,7 @@ void populateVectorOuterProductLoweringPatterns(RewritePatternSet &patterns,
 /// either a parallel or a reduction), we lift them back up to 2-D with a simple
 /// vector.shape_cast to vector<1xk> so that the other patterns can kick in,
 /// thus fully exiting out of the vector.multi_reduction abstraction.
-void populateVectorMultiReductionTransformationPatterns(
+void populateVectorMultiReductionReorderAndExpandPatterns(
     RewritePatternSet &patterns, VectorMultiReductionLowering options,
     PatternBenefit benefit = 1);
 
@@ -107,7 +107,7 @@ void populateVectorMultiReductionUnrollingPatterns(
 /// a sequence of vector.reduction ops. These patterns are the ones
 /// populated by:
 ///
-/// * populateVectorMultiReductionTransformationPatterns
+/// * populateVectorMultiReductionReorderAndExpandPatterns
 /// * populateVectorMultiReductionFlatteningPatterns
 /// * populateVectorMultiReductionUnrollingPatterns
 ///
diff --git a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp
index 5c4aa72b6f60b1..4e2b97aa070842 100644
--- a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp
+++ b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp
@@ -130,7 +130,7 @@ void transform::ApplyLowerMultiReductionPatternsOp::populatePatterns(
     RewritePatternSet &patterns) {
   vector::VectorTransformsOptions vectorTransformOptions;
   vectorTransformOptions.setVectorMultiReductionLowering(getLoweringStrategy());
-  vector::populateVectorMultiReductionTransformationPatterns(
+  vector::populateVectorMultiReductionReorderAndExpandPatterns(
       patterns, vectorTransformOptions.vectorMultiReductionLowering);
   vector::populateVectorMultiReductionFlatteningPatterns(
       patterns, vectorTransformOptions.vectorMultiReductionLowering);
@@ -142,7 +142,7 @@ void transform::ApplyReorderAndExpandMultiReductionPatternsOp::populatePatterns(
     RewritePatternSet &patterns) {
   vector::VectorTransformsOptions vectorTransformOptions;
   vectorTransformOptions.setVectorMultiReductionLowering(getLoweringStrategy());
-  vector::populateVectorMultiReductionTransformationPatterns(
+  vector::populateVectorMultiReductionReorderAndExpandPatterns(
       patterns, vectorTransformOptions.vectorMultiReductionLowering);
 }
 
diff --git a/mlir/lib/Dialect/Vector/Transforms/LowerVectorMultiReduction.cpp b/mlir/lib/Dialect/Vector/Transforms/LowerVectorMultiReduction.cpp
index 640187faeb2eb4..2d6a49bad27bc2 100644
--- a/mlir/lib/Dialect/Vector/Transforms/LowerVectorMultiReduction.cpp
+++ b/mlir/lib/Dialect/Vector/Transforms/LowerVectorMultiReduction.cpp
@@ -497,7 +497,7 @@ struct LowerVectorMultiReductionPass
     MLIRContext *context = op->getContext();
 
     RewritePatternSet patterns(context);
-    mlir::vector::populateVectorMultiReductionTransformationPatterns(
+    mlir::vector::populateVectorMultiReductionReorderAndExpandPatterns(
         patterns, this->loweringStrategy);
     if (failed(applyPatternsGreedily(op, std::move(patterns))))
       signalPassFailure();
@@ -522,7 +522,7 @@ struct LowerVectorMultiReductionPass
 
 } // namespace
 
-void mlir::vector::populateVectorMultiReductionTransformationPatterns(
+void mlir::vector::populateVectorMultiReductionReorderAndExpandPatterns(
     RewritePatternSet &patterns, VectorMultiReductionLowering options,
     PatternBenefit benefit) {
   patterns.add<OneDimMultiReductionToTwoDim>(patterns.getContext(), benefit);
@@ -551,8 +551,8 @@ void mlir::vector::populateVectorMultiReductionUnrollingPatterns(
 void mlir::vector::populateVectorMultiReductionLoweringPatterns(
     RewritePatternSet &patterns, VectorMultiReductionLowering options,
     PatternBenefit benefit) {
-  populateVectorMultiReductionTransformationPatterns(patterns, options,
-                                                     benefit);
+  populateVectorMultiReductionReorderAndExpandPatterns(patterns, options,
+                                                       benefit);
   populateVectorMultiReductionFlatteningPatterns(patterns, options, benefit);
   populateVectorMultiReductionUnrollingPatterns(patterns, options, benefit);
 }
diff --git a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir b/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
deleted file mode 100644
index ae8f10c6abe135..00000000000000
--- a/mlir/test/Dialect/Vector/vector-multi-reduction-transformation.mlir
+++ /dev/null
@@ -1,112 +0,0 @@
-// RUN: mlir-opt %s --transform-interpreter='entry-point=innerreduction' | FileCheck %s --check-prefix=INNER_REDUCTION,ALL
-// RUN: mlir-opt %s --transform-interpreter='entry-point=innerparallel' | FileCheck %s --check-prefix=INNER_PARALLEL,ALL
-
-// INNER_REDUCTION-LABEL: func @inner_reduction_to_inner_parallel
-// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<3x2x4xf32>
-// INNER_REDUCTION-SAME:    %[[ACC:.+]]: vector<2x4xf32>
-func.func @inner_reduction_to_inner_parallel(%arg0: vector<3x2x4xf32>, %acc: vector<2x4xf32>) -> vector<2x4xf32> {
-    // INNER_REDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [1, 2, 0]
-    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <mul>, %[[TRANSPOSED]], %[[ACC]] [2]
-    %0 = vector.multi_reduction <mul>, %arg0, %acc [0] : vector<3x2x4xf32> to vector<2x4xf32>
-    // INNER_REDUCTION: return %[[RESULT]]
-    return %0 : vector<2x4xf32>
-}
-
-// INNER_PARALLEL-LABEL: func @inner_parallel_to_inner_reduction
-// INNER_PARALLEL-SAME:    %[[INPUT:.+]]: vector<3x2x4xf32>
-// INNER_PARALLEL-SAME:    %[[ACC:.+]]: vector<3x2xf32>
-func.func @inner_parallel_to_inner_reduction(%arg0: vector<3x2x4xf32>, %acc: vector<3x2xf32>) -> vector<3x2xf32> {
-    // INNER_PARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [2, 0, 1]
-    // INNER_PARALLEL: vector.multi_reduction <mul>, %[[TRANSPOSED]], %[[ACC]] [0]
-    %0 = vector.multi_reduction <mul>, %arg0, %acc [2] : vector<3x2x4xf32> to vector<3x2xf32>
-    return %0 : vector<3x2xf32>
-}
-
-// INNER_REDUCTION-LABEL: func @transpose_multi_reduction_dims
-// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<2x3x4x5xf32>
-// INNER_REDUCTION-SAME:    %[[ACC:.+]]: vector<2x5xf32>
-func.func @transpose_multi_reduction_dims(%arg0: vector<2x3x4x5xf32>, %acc: vector<2x5xf32>) -> vector<2x5xf32> {
-    // INNER_REDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [0, 3, 1, 2]
-    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [2, 3]
-    %0 = vector.multi_reduction <add>, %arg0, %acc [1, 2] : vector<2x3x4x5xf32> to vector<2x5xf32>
-    // INNER_REDUCTION: return %[[RESULT]]
-    return %0 : vector<2x5xf32>
-}
-
-// ALL-LABEL: func @transpose_parallel_middle
-// ALL-SAME:    %[[INPUT:.+]]: vector<3x4x5xf32>
-// ALL-SAME:    %[[ACC:.+]]: vector<4xf32>
-func.func @transpose_parallel_middle(%arg0: vector<3x4x5xf32>, %acc: vector<4xf32>) -> vector<4xf32> {
-    // INNER_REDUCTION: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [1, 0, 2]
-    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [1, 2]
-    // INNER_PARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[INPUT]], [0, 2, 1]
-    // INNER_PARALLEL: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[ACC]] [0, 1]
-    %0 = vector.multi_reduction <add>, %arg0, %acc [0, 2] : vector<3x4x5xf32> to vector<4xf32>
-    // ALL: return %[[RESULT]]
-    return %0 : vector<4xf32>
-}
-
-// ALL-LABEL: func @one_dim_to_two_dim
-// ALL-SAME:    %[[INPUT:.+]]: vector<8xf32>
-// ALL-SAME:    %[[ACC:.+]]: f32
-func.func @one_dim_to_two_dim(%arg0: vector<8xf32>, %acc: f32) -> f32 {
-    // ALL: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<8xf32> to vector<1x8xf32>
-    // ALL: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
-    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST]] [1]
-    // INNER_REDUCTION: %[[SCALAR:.+]] = vector.extract %[[RESULT]][0]
-    // INNER_PARALLEL: %[[TRANSPOSED:.+]] = vector.transpose %[[CAST]], [1, 0]
-    // INNER_PARALLEL: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[TRANSPOSED]], %[[BROADCAST]] [0]
-    // INNER_PARALLEL: %[[SCALAR:.+]] = vector.extract %[[RESULT]][0]
-    %0 = vector.multi_reduction <add>, %arg0, %acc [0] : vector<8xf32> to f32
-    // ALL: return %[[SCALAR]]
-    return %0 : f32
-}
-
-// INNER_REDUCTION-LABEL: func @one_dim_to_two_dim_scalable
-// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<[4]xf32>
-// INNER_REDUCTION-SAME:    %[[ACC:.+]]: f32
-func.func @one_dim_to_two_dim_scalable(%arg0: vector<[4]xf32>, %acc: f32) -> f32 {
-    // INNER_REDUCTION: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<[4]xf32> to vector<1x[4]xf32>
-    // INNER_REDUCTION: %[[BROADCAST:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
-    // INNER_REDUCTION: %[[RESULT:.+]] = vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST]] [1]
-    %0 = vector.multi_reduction <add>, %arg0, %acc [0] : vector<[4]xf32> to f32
-    // INNER_REDUCTION: %[[EXTRACT:.+]] = vector.extract %[[RESULT]][0]
-    // INNER_REDUCTION: return %[[EXTRACT]]
-    return %0 : f32
-}
-
-// INNER_REDUCTION-LABEL: func @one_dim_to_two_dim_masked
-// INNER_REDUCTION-SAME:    %[[INPUT:.+]]: vector<8xf32>
-// INNER_REDUCTION-SAME:    %[[ACC:.+]]: f32
-// INNER_REDUCTION-SAME:    %[[MASK:.+]]: vector<8xi1>
-func.func @one_dim_to_two_dim_masked(%arg0: vector<8xf32>, %acc: f32, %mask: vector<8xi1>) -> f32 {
-    // INNER_REDUCTION: %[[CAST:.+]] = vector.shape_cast %[[INPUT]] : vector<8xf32> to vector<1x8xf32>
-    // INNER_REDUCTION: %[[BROADCAST_ACC:.+]] = vector.broadcast %[[ACC]] : f32 to vector<1xf32>
-    // INNER_REDUCTION: %[[BROADCAST_MASK:.+]] = vector.broadcast %[[MASK]] : vector<8xi1> to vector<1x8xi1>
-    // INNER_REDUCTION: %[[RESULT:.+]] = vector.mask %[[BROADCAST_MASK]] {
-    // INNER_REDUCTION:   vector.multi_reduction <add>, %[[CAST]], %[[BROADCAST_ACC]] [1]
-    %0 = vector.mask %mask {
-      vector.multi_reduction <add>, %arg0, %acc [0] : vector<8xf32> to f32
-    } : vector<8xi1> -> f32
-    // INNER_REDUCTION: %[[EXTRACT:.+]] = vector.extract %[[RESULT]][0]
-    // INNER_REDUCTION: return %[[EXTRACT]]
-    return %0 : f32
-}
-
-module attributes {transform.with_named_sequence} {
-  transform.named_sequence @innerreduction(%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.reorder_and_expand_multi_reduction_dims lowering_strategy = "innerreduction"
-    } : !transform.op<"func.func">
-    transform.yield
-  }
-
-  transform.named_sequence @innerparallel(%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.reorder_and_expand_multi_reduction_dims lowering_strategy = "innerparallel"
-    } : !transform.op<"func.func">
-    transform.yield
-  }
-}

>From 1592aba4ddbd6862bcc5a18b466fb558a0dd280a Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Tue, 17 Feb 2026 15:36:02 -0500
Subject: [PATCH 16/16] remove unnecessary tests

---
 .../vector-multi-reduction-lowering.mlir      | 76 -------------------
 1 file changed, 76 deletions(-)

diff --git a/mlir/test/Dialect/Vector/vector-multi-reduction-lowering.mlir b/mlir/test/Dialect/Vector/vector-multi-reduction-lowering.mlir
index 146080c268aa22..3ce9f57edf9d68 100644
--- a/mlir/test/Dialect/Vector/vector-multi-reduction-lowering.mlir
+++ b/mlir/test/Dialect/Vector/vector-multi-reduction-lowering.mlir
@@ -69,69 +69,6 @@ func.func @vector_reduction_inner(%arg0: vector<2x3x4x5xi32>, %acc: vector<2x3xi
 //       CHECK:       %[[RESULT:.+]] = vector.shape_cast %[[FLAT_RESULT_VEC]] : vector<6xi32> to vector<2x3xi32>
 //       CHECK:       return %[[RESULT]]
 
-// Patterns applied:
-// * InnerOuterDimReductionConversion from populateVectorMultiReductionTransformationPatterns
-// * ReduceMultiDimReductionRank from populateVectorMultiReductionFlatteningPatterns
-// * TwoDimMultiReductionToReduction from populateVectorMultiReductionUnrollingPatterns
-func.func @vector_multi_reduction_transposed(%arg0: vector<2x3x4x5xf32>, %acc: vector<2x5xf32>) -> vector<2x5xf32> {
-    %0 = vector.multi_reduction <add>, %arg0, %acc [1, 2] : vector<2x3x4x5xf32> to vector<2x5xf32>
-    return %0 : vector<2x5xf32>
-}
-
-// CHECK-LABEL: func @vector_multi_reduction_transposed
-//  CHECK-SAME:    %[[INPUT:.+]]: vector<2x3x4x5xf32>
-//       CHECK:     %[[TRANSPOSED_INPUT:.+]] = vector.transpose %[[INPUT]], [0, 3, 1, 2] : vector<2x3x4x5xf32> to vector<2x5x3x4xf32>
-//       CHECK:     vector.shape_cast %[[TRANSPOSED_INPUT]] : vector<2x5x3x4xf32> to vector<10x12xf32>
-//       CHECK:     %[[RESULT:.+]] = vector.shape_cast %{{.*}} : vector<10xf32> to vector<2x5xf32>
-//       CHECK:       return %[[RESULT]]
-
-// Patterns applied:
-// * InnerOuterDimReductionConversion from populateVectorMultiReductionTransformationPatterns
-// * ReduceMultiDimReductionRank from populateVectorMultiReductionFlatteningPatterns
-// * TwoDimMultiReductionToReduction from populateVectorMultiReductionUnrollingPatterns
-func.func @vector_multi_reduction_ordering(%arg0: vector<3x2x4xf32>, %acc: vector<2x4xf32>) -> vector<2x4xf32> {
-    %0 = vector.multi_reduction <mul>, %arg0, %acc [0] : vector<3x2x4xf32> to vector<2x4xf32>
-    return %0 : vector<2x4xf32>
-}
-// CHECK-LABEL: func @vector_multi_reduction_ordering
-//  CHECK-SAME:   %[[INPUT:.+]]: vector<3x2x4xf32>, %[[ACC:.*]]: vector<2x4xf32>)
-//   CHECK-DAG:       %[[RESULT_VEC_0:.+]] = arith.constant dense<{{.*}}> : vector<8xf32>
-//       CHECK:       %[[TRANSPOSED_INPUT:.+]] = vector.transpose %[[INPUT]], [1, 2, 0] : vector<3x2x4xf32> to vector<2x4x3xf32>
-//       CHECK:       %[[V0:.+]] = vector.extract %[[TRANSPOSED_INPUT]][0, 0]
-//       CHECK:       %[[ACC0:.+]] = vector.extract %[[ACC]][0, 0] : f32 from vector<2x4xf32>
-//       CHECK:       %[[RV0:.+]] = vector.reduction <mul>, %[[V0]], %[[ACC0]] : vector<3xf32> into f32
-//       CHECK:       %[[RESULT_VEC_1:.+]] = vector.insert %[[RV0:.+]], %[[RESULT_VEC_0]] [0] : f32 into vector<8xf32>
-//       CHECK:       %[[V1:.+]] = vector.extract %[[TRANSPOSED_INPUT]][0, 1]
-//       CHECK:       %[[ACC1:.+]] = vector.extract %[[ACC]][0, 1] : f32 from vector<2x4xf32>
-//       CHECK:       %[[RV1:.+]] = vector.reduction <mul>, %[[V1]], %[[ACC1]] : vector<3xf32> into f32
-//       CHECK:       %[[RESULT_VEC_2:.+]] = vector.insert %[[RV1:.+]], %[[RESULT_VEC_1]] [1] : f32 into vector<8xf32>
-//       CHECK:       %[[V2:.+]] = vector.extract %[[TRANSPOSED_INPUT]][0, 2]
-//       CHECK:       %[[ACC2:.+]] = vector.extract %[[ACC]][0, 2] : f32 from vector<2x4xf32>
-//       CHECK:       %[[RV2:.+]] = vector.reduction <mul>, %[[V2]], %[[ACC2]] : vector<3xf32> into f32
-//       CHECK:       %[[RESULT_VEC_3:.+]] = vector.insert %[[RV2:.+]], %[[RESULT_VEC_2]] [2] : f32 into vector<8xf32>
-//       CHECK:       %[[V3:.+]] = vector.extract %[[TRANSPOSED_INPUT]][0, 3]
-//       CHECK:       %[[ACC3:.+]] = vector.extract %[[ACC]][0, 3] : f32 from vector<2x4xf32>
-//       CHECK:       %[[RV3:.+]] = vector.reduction <mul>, %[[V3]], %[[ACC3]] : vector<3xf32> into f32
-//       CHECK:       %[[RESULT_VEC_4:.+]] = vector.insert %[[RV3:.+]], %[[RESULT_VEC_3]] [3] : f32 into vector<8xf32>
-//       CHECK:       %[[V4:.+]] = vector.extract %[[TRANSPOSED_INPUT]][1, 0]
-//       CHECK:       %[[ACC4:.+]] = vector.extract %[[ACC]][1, 0] : f32 from vector<2x4xf32>
-//       CHECK:       %[[RV4:.+]] = vector.reduction <mul>, %[[V4]], %[[ACC4]] : vector<3xf32> into f32
-//       CHECK:       %[[RESULT_VEC_5:.+]] = vector.insert %[[RV4:.+]], %[[RESULT_VEC_4]] [4] : f32 into vector<8xf32>
-//       CHECK:       %[[V5:.+]] = vector.extract %[[TRANSPOSED_INPUT]][1, 1]
-//       CHECK:       %[[ACC5:.+]] = vector.extract %[[ACC]][1, 1] : f32 from vector<2x4xf32>
-//       CHECK:       %[[RV5:.+]] = vector.reduction <mul>, %[[V5]], %[[ACC5]] : vector<3xf32> into f32
-//       CHECK:       %[[RESULT_VEC_6:.+]] = vector.insert %[[RV5:.+]], %[[RESULT_VEC_5]] [5] : f32 into vector<8xf32>
-//       CHECK:       %[[V6:.+]] = vector.extract %[[TRANSPOSED_INPUT]][1, 2]
-//       CHECK:       %[[ACC6:.+]] = vector.extract %[[ACC]][1, 2] : f32 from vector<2x4xf32>
-//       CHECK:       %[[RV6:.+]] = vector.reduction <mul>, %[[V6]], %[[ACC6]] : vector<3xf32> into f32
-//       CHECK:       %[[RESULT_VEC_7:.+]] = vector.insert %[[RV6:.+]], %[[RESULT_VEC_6]] [6] : f32 into vector<8xf32>
-//       CHECK:       %[[V7:.+]] = vector.extract %[[TRANSPOSED_INPUT]][1, 3]
-//       CHECK:       %[[ACC7:.+]] = vector.extract %[[ACC]][1, 3] : f32 from vector<2x4xf32>
-//       CHECK:       %[[RV7:.+]] = vector.reduction <mul>, %[[V7]], %[[ACC7]] : vector<3xf32> into f32
-//       CHECK:       %[[RESULT_VEC:.+]] = vector.insert %[[RV7:.+]], %[[RESULT_VEC_7]] [7] : f32 into vector<8xf32>
-//       CHECK:       %[[RESHAPED_VEC:.+]] = vector.shape_cast %[[RESULT_VEC]] : vector<8xf32> to vector<2x4xf32>
-//       CHECK:       return %[[RESHAPED_VEC]]
-
 // Patterns applied:
 // * TwoDimMultiReductionToReduction from populateVectorMultiReductionUnrollingPatterns
 func.func @vectorize_dynamic_reduction(%arg0: tensor<?x?xf32>, %arg1: tensor<?xf32>) -> tensor<?xf32> {
@@ -247,19 +184,6 @@ func.func @vectorize_dynamic_transpose_reduction(%arg0: tensor<?x?x?xf32>, %arg1
 // CHECK:           %[[VAL_159:.*]] = vector.mask %[[VAL_158]] { vector.reduction <add>
 // CHECK:           %[[VAL_160:.*]] = vector.insert %[[VAL_159]]
 
-// Patterns applied:
-// * InnerOuterDimReductionConversion from populateVectorMultiReductionTransformationPatterns
-// * ReduceMultiDimReductionRank from populateVectorMultiReductionFlatteningPatterns
-// * TwoDimMultiReductionToReduction from populateVectorMultiReductionUnrollingPatterns
-func.func @vector_multi_reduction_parallel_middle(%arg0: vector<3x4x5xf32>, %acc: vector<4xf32>) -> vector<4xf32> {
-    %0 = vector.multi_reduction <add>, %arg0, %acc [0, 2] : vector<3x4x5xf32> to vector<4xf32>
-    return %0 : vector<4xf32>
-}
-
-// CHECK-LABEL: func @vector_multi_reduction_parallel_middle
-//  CHECK-SAME:   %[[INPUT:.+]]: vector<3x4x5xf32>, %[[ACC:.+]]: vector<4xf32>
-//       CHECK: vector.transpose %[[INPUT]], [1, 0, 2] : vector<3x4x5xf32> to vector<4x3x5xf32>
-
 // Patterns applied:
 // * ReduceMultiDimReductionRank from populateVectorMultiReductionFlatteningPatterns
 // * TwoDimMultiReductionToReduction from populateVectorMultiReductionUnrollingPatterns



More information about the Mlir-commits mailing list