[Mlir-commits] [mlir] [mlir][vector] Do not flatten or scalarize region-masked transfers (PR #231799)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Sat Oct 17 08:48:35 PDT 2026


================
@@ -826,3 +826,46 @@ func.func @transfer_write_multi_dim_unit_vector(
 // CHECK-128B-LABEL: func @transfer_write_multi_dim_unit_vector
 //       CHECK-128B:   vector.shape_cast {{.*}}: vector<1x1x1xi8> to vector<1xi8>
 //       CHECK-128B:   vector.transfer_write {{.*}}: vector<1xi8>, memref<5x4x3x2xi8>
+
+// -----
+
+// Region-masked transfers cannot be flattened because the rewrite would
+// create multiple operations inside the vector.mask region.
+
+// CHECK-LABEL: func.func @region_masked_transfer_read
+//       CHECK:   %[[READ:.+]] = vector.mask %{{.+}} { vector.transfer_read
+//       CHECK:   return %[[READ]]
+
+// CHECK-128B-LABEL: func.func @region_masked_transfer_read
+//       CHECK-128B:   %[[READ:.+]] = vector.mask %{{.+}} { vector.transfer_read
+//       CHECK-128B:   return %[[READ]]
+func.func @region_masked_transfer_read(
+    %mem: memref<2x2xf32>, %mask: vector<2x2xi1>) -> vector<2x2xf32> {
+  %c0 = arith.constant 0 : index
+  %cst = arith.constant 0.0 : f32
+  %read = vector.mask %mask {
+    vector.transfer_read %mem[%c0, %c0], %cst {in_bounds = [true, true]} :
+      memref<2x2xf32>, vector<2x2xf32>
+  } : vector<2x2xi1> -> vector<2x2xf32>
+  return %read : vector<2x2xf32>
+}
+
+// -----
+
+// CHECK-LABEL: func.func @region_masked_transfer_write
+//       CHECK:   vector.mask %{{.+}} { vector.transfer_write
+//       CHECK:   return
+
+// CHECK-128B-LABEL: func.func @region_masked_transfer_write
+//       CHECK-128B:   vector.mask %{{.+}} { vector.transfer_write
+//       CHECK-128B:   return
+func.func @region_masked_transfer_write(
+    %mem: memref<2x2xf32>, %value: vector<2x2xf32>,
+    %mask: vector<2x2xi1>) {
+  %c0 = arith.constant 0 : index
+  vector.mask %mask {
+    vector.transfer_write %value, %mem[%c0, %c0] {in_bounds = [true, true]} :
+      vector<2x2xf32>, memref<2x2xf32>
+  } : vector<2x2xi1>
+  return
+}
----------------
Vaisman wrote:

Done, derived from `@transfer_{read,write}_dims_match_contiguous` and moved next to them.

https://github.com/llvm/llvm-project/pull/231799


More information about the Mlir-commits mailing list