[Mlir-commits] [mlir] [mlir][x86vector] Wrapping `populateFlattenVectorTransferPatterns` as a transform pass. (PR #178134)
Arun Thangamani
llvmlistbot at llvm.org
Tue Jan 27 07:22:28 PST 2026
https://github.com/arun-thmn updated https://github.com/llvm/llvm-project/pull/178134
>From a782e6fd890175a999f04e0f135403535c8fe26c Mon Sep 17 00:00:00 2001
From: Arun Thangamani <arun.thangamani at intel.com>
Date: Mon, 26 Jan 2026 23:58:24 -0800
Subject: [PATCH 1/4] Wrapping populateFlattenVectorTransferPatterns as a
transform pass
---
.../X86Vector/TransformOps/X86VectorTransformOps.td | 11 +++++++++++
mlir/include/mlir/Dialect/X86Vector/Transforms.h | 5 +++++
.../X86Vector/TransformOps/X86VectorTransformOps.cpp | 7 +++++++
3 files changed, 23 insertions(+)
diff --git a/mlir/include/mlir/Dialect/X86Vector/TransformOps/X86VectorTransformOps.td b/mlir/include/mlir/Dialect/X86Vector/TransformOps/X86VectorTransformOps.td
index 891829fca017f..4c953abc125bc 100644
--- a/mlir/include/mlir/Dialect/X86Vector/TransformOps/X86VectorTransformOps.td
+++ b/mlir/include/mlir/Dialect/X86Vector/TransformOps/X86VectorTransformOps.td
@@ -71,6 +71,17 @@ def ApplyShuffleVectorFMAOpsPatternsOp : Op<Transform_Dialect,
let assemblyFormat = "attr-dict";
}
+def ApplyFlattenVectorTransferOpsPatternsOp : Op<Transform_Dialect,
+ "apply_patterns.x86vector.flatten_vector_transfer_ops",
+ [DeclareOpInterfaceMethods<PatternDescriptorOpInterface>]> {
+ let description = [{
+ Collect patterns to rewrite contiguous row-major vector.transfer_read or
+ vector.transfer_write operations to a 1D operation.
+ }];
+
+ let assemblyFormat = "attr-dict";
+}
+
#endif // X86VECTOR_TRANSFORM_OPS
diff --git a/mlir/include/mlir/Dialect/X86Vector/Transforms.h b/mlir/include/mlir/Dialect/X86Vector/Transforms.h
index aadca92708908..3c73a2e172487 100644
--- a/mlir/include/mlir/Dialect/X86Vector/Transforms.h
+++ b/mlir/include/mlir/Dialect/X86Vector/Transforms.h
@@ -104,6 +104,11 @@ void populateSinkVectorProducerOpsPatterns(RewritePatternSet &patterns);
// grouped with respect to odd/even packed index.
void populateShuffleVectorFMAOpsPatterns(RewritePatternSet &patterns);
+// Rewrites contiguous row-major vector.transfer_read or vector.transfer_write
+// operations by inserting a memref.collapse_shape on the source,
+// transforming the operation to use a 1D source.
+void populateFlattenVectorTransferOpsPatterns(RewritePatternSet &patterns);
+
//===----------------------------------------------------------------------===//
/// Helpers extracted from:
/// - clang/lib/Headers/avxintrin.h
diff --git a/mlir/lib/Dialect/X86Vector/TransformOps/X86VectorTransformOps.cpp b/mlir/lib/Dialect/X86Vector/TransformOps/X86VectorTransformOps.cpp
index c6be69305da50..57b0cfc162b8d 100644
--- a/mlir/lib/Dialect/X86Vector/TransformOps/X86VectorTransformOps.cpp
+++ b/mlir/lib/Dialect/X86Vector/TransformOps/X86VectorTransformOps.cpp
@@ -12,6 +12,7 @@
#include "mlir/Dialect/Transform/IR/TransformDialect.h"
#include "mlir/Dialect/Transform/Interfaces/TransformInterfaces.h"
#include "mlir/Dialect/Vector/IR/VectorOps.h"
+#include "mlir/Dialect/Vector/Transforms/VectorRewritePatterns.h"
#include "mlir/Dialect/X86Vector/Transforms.h"
#include "mlir/Dialect/X86Vector/X86VectorDialect.h"
@@ -21,6 +22,7 @@
using namespace mlir;
using namespace mlir::x86vector;
using namespace mlir::transform;
+using namespace mlir::vector;
void mlir::transform::ApplyVectorContractToFMAPatternsOp::populatePatterns(
RewritePatternSet &patterns) {
@@ -47,6 +49,11 @@ void mlir::transform::ApplyShuffleVectorFMAOpsPatternsOp::populatePatterns(
x86vector::populateShuffleVectorFMAOpsPatterns(patterns);
}
+void mlir::transform::ApplyFlattenVectorTransferOpsPatternsOp::
+ populatePatterns(RewritePatternSet &patterns) {
+ vector::populateFlattenVectorTransferPatterns(patterns);
+}
+
//===----------------------------------------------------------------------===//
// Transform op registration
//===----------------------------------------------------------------------===//
>From 1887de8f1f9e8dc33654ae545e0e309ea385a09a Mon Sep 17 00:00:00 2001
From: Arun Thangamani <arun.thangamani at intel.com>
Date: Tue, 27 Jan 2026 00:07:31 -0800
Subject: [PATCH 2/4] fixing a clang-format error
---
.../Dialect/X86Vector/TransformOps/X86VectorTransformOps.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mlir/lib/Dialect/X86Vector/TransformOps/X86VectorTransformOps.cpp b/mlir/lib/Dialect/X86Vector/TransformOps/X86VectorTransformOps.cpp
index 57b0cfc162b8d..cfc6c4194f5af 100644
--- a/mlir/lib/Dialect/X86Vector/TransformOps/X86VectorTransformOps.cpp
+++ b/mlir/lib/Dialect/X86Vector/TransformOps/X86VectorTransformOps.cpp
@@ -49,8 +49,8 @@ void mlir::transform::ApplyShuffleVectorFMAOpsPatternsOp::populatePatterns(
x86vector::populateShuffleVectorFMAOpsPatterns(patterns);
}
-void mlir::transform::ApplyFlattenVectorTransferOpsPatternsOp::
- populatePatterns(RewritePatternSet &patterns) {
+void mlir::transform::ApplyFlattenVectorTransferOpsPatternsOp::populatePatterns(
+ RewritePatternSet &patterns) {
vector::populateFlattenVectorTransferPatterns(patterns);
}
>From 32eeea8f5f1d5858ff0149dc0270c6fdf7e1b7e8 Mon Sep 17 00:00:00 2001
From: Arun Thangamani <arun.thangamani at intel.com>
Date: Tue, 27 Jan 2026 07:20:54 -0800
Subject: [PATCH 3/4] added an argument + one test-case for validation
---
.../X86Vector/TransformOps/X86VectorTransformOps.td | 10 ++++++++--
mlir/include/mlir/Dialect/X86Vector/Transforms.h | 4 +++-
.../X86Vector/TransformOps/X86VectorTransformOps.cpp | 3 ++-
3 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/mlir/include/mlir/Dialect/X86Vector/TransformOps/X86VectorTransformOps.td b/mlir/include/mlir/Dialect/X86Vector/TransformOps/X86VectorTransformOps.td
index 4c953abc125bc..f41caa87f7375 100644
--- a/mlir/include/mlir/Dialect/X86Vector/TransformOps/X86VectorTransformOps.td
+++ b/mlir/include/mlir/Dialect/X86Vector/TransformOps/X86VectorTransformOps.td
@@ -79,9 +79,15 @@ def ApplyFlattenVectorTransferOpsPatternsOp : Op<Transform_Dialect,
vector.transfer_write operations to a 1D operation.
}];
- let assemblyFormat = "attr-dict";
-}
+ let arguments = (ins
+ DefaultValuedAttr<UI32Attr,
+ "std::numeric_limits<unsigned>::max()">:$target_vector_bitwidth
+ );
+ let assemblyFormat = [{
+ (`target_vector_bitwidth` `=` $target_vector_bitwidth^)? attr-dict
+ }];
+}
#endif // X86VECTOR_TRANSFORM_OPS
diff --git a/mlir/include/mlir/Dialect/X86Vector/Transforms.h b/mlir/include/mlir/Dialect/X86Vector/Transforms.h
index 3c73a2e172487..f2a1d58f42c1f 100644
--- a/mlir/include/mlir/Dialect/X86Vector/Transforms.h
+++ b/mlir/include/mlir/Dialect/X86Vector/Transforms.h
@@ -107,7 +107,9 @@ void populateShuffleVectorFMAOpsPatterns(RewritePatternSet &patterns);
// Rewrites contiguous row-major vector.transfer_read or vector.transfer_write
// operations by inserting a memref.collapse_shape on the source,
// transforming the operation to use a 1D source.
-void populateFlattenVectorTransferOpsPatterns(RewritePatternSet &patterns);
+void populateFlattenVectorTransferOpsPatterns(
+ RewritePatternSet &patterns,
+ unsigned targetVectorBitwidth = std::numeric_limits<unsigned>::max());
//===----------------------------------------------------------------------===//
/// Helpers extracted from:
diff --git a/mlir/lib/Dialect/X86Vector/TransformOps/X86VectorTransformOps.cpp b/mlir/lib/Dialect/X86Vector/TransformOps/X86VectorTransformOps.cpp
index cfc6c4194f5af..7601966a4652c 100644
--- a/mlir/lib/Dialect/X86Vector/TransformOps/X86VectorTransformOps.cpp
+++ b/mlir/lib/Dialect/X86Vector/TransformOps/X86VectorTransformOps.cpp
@@ -51,7 +51,8 @@ void mlir::transform::ApplyShuffleVectorFMAOpsPatternsOp::populatePatterns(
void mlir::transform::ApplyFlattenVectorTransferOpsPatternsOp::populatePatterns(
RewritePatternSet &patterns) {
- vector::populateFlattenVectorTransferPatterns(patterns);
+ vector::populateFlattenVectorTransferPatterns(patterns,
+ getTargetVectorBitwidth());
}
//===----------------------------------------------------------------------===//
>From ad9384d161233bec3cf9e977d2ce68913ff0be62 Mon Sep 17 00:00:00 2001
From: Arun Thangamani <arun.thangamani at intel.com>
Date: Tue, 27 Jan 2026 07:21:58 -0800
Subject: [PATCH 4/4] added an argument + one test-case for validation
---
.../flatten-vector-transfer-ops.mlir | 31 +++++++++++++++++++
1 file changed, 31 insertions(+)
create mode 100644 mlir/test/Dialect/X86Vector/flatten-vector-transfer-ops.mlir
diff --git a/mlir/test/Dialect/X86Vector/flatten-vector-transfer-ops.mlir b/mlir/test/Dialect/X86Vector/flatten-vector-transfer-ops.mlir
new file mode 100644
index 0000000000000..40c39c5f51c2a
--- /dev/null
+++ b/mlir/test/Dialect/X86Vector/flatten-vector-transfer-ops.mlir
@@ -0,0 +1,31 @@
+// RUN: mlir-opt %s -transform-interpreter -cse -split-input-file | FileCheck %s
+
+func.func @flatten_transfer_ops(%arg0: memref<16x16xf32>, %arg1: vector<8xf32>) -> vector<8xf32> {
+ %c0 = arith.constant 0 : index
+ %c8 = arith.constant 8 : index
+ %b0 = ub.poison : f32
+ %0 = vector.transfer_read %arg0[%c0, %c0], %b0 {in_bounds = [true, true]} : memref<16x16xf32>, vector<1x8xf32>
+ %1 = vector.transfer_read %arg0[%c0, %c8], %b0 {in_bounds = [true, true]} : memref<16x16xf32>, vector<1x8xf32>
+ %2 = vector.shape_cast %0 : vector<1x8xf32> to vector<8xf32>
+ %3 = vector.shape_cast %1 : vector<1x8xf32> to vector<8xf32>
+ %4 = vector.fma %2, %3, %arg1 : vector<8xf32>
+ return %4 : vector<8xf32>
+}
+
+// CHECK-LABEL: @flatten_transfer_ops
+// CHECK-NOT: vector.transfer_read {{.*}}, vector<1x8xf32>
+// CHECK-NOT: vector.transfer_read {{.*}}, vector<1x8xf32>
+// CHECK: vector.transfer_read {{.*}}, vector<8xf32>
+// CHECK-NEXT: vector.transfer_read {{.*}}, vector<8xf32>
+// CHECK-NOT: vector.shape_cast
+// CHECK-NOT: vector.shape_cast
+
+module attributes {transform.with_named_sequence} {
+ transform.named_sequence @__transform_main(%arg1: !transform.any_op {transform.readonly}) {
+ %func = transform.structured.match ops{["func.func"]} in %arg1 : (!transform.any_op) -> !transform.any_op
+ transform.apply_patterns to %func {
+ transform.apply_patterns.x86vector.flatten_vector_transfer_ops
+ } : !transform.any_op
+ transform.yield
+ }
+}
More information about the Mlir-commits
mailing list