@@ -368,6 +368,34 @@ module attributes {transform.with_named_sequence} {
368
368
369
369
// -----
370
370
371
+ // CHECK: #[[MAP:.*]] = affine_map<(d0, d1) -> (d1, d0)>
372
+ // CHECK: func @test_masked_vectorize_linalg_transpose
373
+ func.func @test_masked_vectorize_linalg_transpose (%arg0: tensor <?x?xf32 >, %arg1: tensor <?x?xf32 >) -> tensor <?x?xf32 > {
374
+ // CHECK: %[[C0:.*]] = arith.constant 0 : index
375
+ // CHECK: %[[D0:.*]] = tensor.dim %arg0, %[[C0]]
376
+ // CHECK: %[[C1:.*]] = arith.constant 1 : index
377
+ // CHECK: %[[D1:.*]] = tensor.dim %arg0, %[[C1]]
378
+ // CHECK: %[[MASK0:.*]] = vector.create_mask %[[D0]], %[[D1]]
379
+ // CHECK: %[[LOAD:.*]] = vector.mask %[[MASK0]] { vector.transfer_read %arg0{{.+}} }
380
+ // CHECK-SAME: vector<2x4xi1> -> vector<2x4xf32>
381
+ // CHECK: %[[MASK1:.*]] = vector.create_mask %[[D1]], %[[D0]]
382
+ // CHECK: %[[WRITE:.*]] = vector.mask %[[MASK1]] { vector.transfer_write %[[LOAD]], %arg1{{.+}} permutation_map = #[[MAP]]{{.+}} }
383
+ // CHECK-SAME: vector<4x2xi1> -> tensor<?x?xf32>
384
+ // CHECK: return %[[WRITE]]
385
+ %0 = linalg.transpose ins (%arg0 : tensor <?x?xf32 >) outs (%arg1 : tensor <?x?xf32 >) permutation = [1 , 0 ]
386
+ return %0 : tensor <?x?xf32 >
387
+ }
388
+
389
+ module attributes {transform.with_named_sequence } {
390
+ transform.named_sequence @__transform_main (%arg1: !transform.any_op {transform.readonly }) {
391
+ %0 = transform.structured.match ops {[" linalg.transpose" ]} in %arg1 : (!transform.any_op ) -> !transform.any_op
392
+ transform.structured.vectorize %0 vector_sizes [2 , 4 ] : !transform.any_op
393
+ transform.yield
394
+ }
395
+ }
396
+
397
+ // -----
398
+
371
399
// CHECK-LABEL: func @test_masked_vectorize_linalg_copy
372
400
func.func @test_masked_vectorize_linalg_copy (%A : memref <?x?xf32 >, %B : memref <?x?xf32 >) {
373
401
// CHECK: %[[c0:.*]] = arith.constant 0 : index
0 commit comments