@@ -51,6 +51,23 @@ func.func @transfer_to_load(%mem : memref<8x8xf32>, %i : index) -> vector<4xf32>
51
51
return %res : vector <4 xf32 >
52
52
}
53
53
54
+ // Masked transfer_read/write inside are NOT lowered to vector.load/store
55
+ // CHECK-LABEL: func @masked_transfer_to_load(
56
+ // CHECK-SAME: %[[MEM:.*]]: memref<8x8xf32>,
57
+ // CHECK-SAME: %[[IDX:.*]]: index,
58
+ // CHECK-SAME: %[[MASK:.*]]: vector<4xi1>) -> memref<8x8xf32>
59
+ // CHECK-NOT: vector.load
60
+ // CHECK-NOT: vector.store
61
+ // CHECK: %[[READ:.*]] = vector.mask %[[MASK]] { vector.transfer_read %arg0[%[[IDX]], %[[IDX]]]{{.*}} : memref<8x8xf32>, vector<4xf32> } : vector<4xi1> -> vector<4xf32>
62
+ // CHECK: vector.mask %[[MASK]] { vector.transfer_write %[[READ]], %[[MEM]][%[[IDX]], %[[IDX]]]{{.*}} : vector<4xf32>, memref<8x8xf32> } : vector<4xi1>
63
+
64
+ func.func @masked_transfer_to_load (%mem : memref <8 x8 xf32 >, %i : index , %mask : vector <4 xi1 >) -> memref <8 x8 xf32 > {
65
+ %cf0 = arith.constant 0.0 : f32
66
+ %read = vector.mask %mask {vector.transfer_read %mem[%i , %i ], %cf0 {in_bounds = [true ]} : memref <8 x8 xf32 >, vector <4 xf32 >} : vector <4 xi1 > -> vector <4 xf32 >
67
+ vector.mask %mask {vector.transfer_write %read , %mem[%i , %i ] {in_bounds = [true ]} : vector <4 xf32 >, memref <8 x8 xf32 > } : vector <4 xi1 >
68
+ return %mem : memref <8 x8 xf32 >
69
+ }
70
+
54
71
// n-D results are also supported.
55
72
// CHECK-LABEL: func @transfer_2D(
56
73
// CHECK-SAME: %[[MEM:.*]]: memref<8x8xf32>,
@@ -392,24 +409,6 @@ func.func @transfer_2D_masked(%mem : memref<?x?xf32>, %mask : vector<2x4xi1>) ->
392
409
return %res : vector <2 x4 xf32 >
393
410
}
394
411
395
- // Masked transfer_read/write inside are NOT lowered to vector.load/store
396
- // CHECK-LABEL: func @masked_transfer_to_load(
397
- // CHECK-SAME: %[[MEM:.*]]: memref<8x8xf32>,
398
- // CHECK-SAME: %[[IDX:.*]]: index,
399
- // CHECK-SAME: %[[MASK:.*]]: vector<4xi1>) -> memref<8x8xf32>
400
- // CHECK-NOT: vector.load
401
- // CHECK-NOT: vector.store
402
- // CHECK: %[[READ:.*]] = vector.mask %[[MASK]] { vector.transfer_read %arg0[%[[IDX]], %[[IDX]]]{{.*}} : memref<8x8xf32>, vector<4xf32> } : vector<4xi1> -> vector<4xf32>
403
- // CHECK: vector.mask %[[MASK]] { vector.transfer_write %[[READ]], %[[MEM]][%[[IDX]], %[[IDX]]]{{.*}} : vector<4xf32>, memref<8x8xf32> } : vector<4xi1>
404
-
405
-
406
- func.func @masked_transfer_to_load (%mem : memref <8 x8 xf32 >, %i : index , %mask : vector <4 xi1 >) -> memref <8 x8 xf32 > {
407
- %cf0 = arith.constant 0.0 : f32
408
- %read = vector.mask %mask { vector.transfer_read %mem[%i , %i ], %cf0 {in_bounds = [true ]} : memref <8 x8 xf32 >, vector <4 xf32 >} : vector <4 xi1 > -> vector <4 xf32 >
409
- vector.mask %mask {vector.transfer_write %read , %mem[%i , %i ] {in_bounds = [true ]} : vector <4 xf32 >, memref <8 x8 xf32 > } : vector <4 xi1 >
410
- return %mem : memref <8 x8 xf32 >
411
- }
412
-
413
412
module attributes {transform.with_named_sequence } {
414
413
transform.named_sequence @__transform_main (%root : !transform.any_op {transform.readonly }) {
415
414
%func_op = transform.structured.match ops {[" func.func" ]} in %root : (!transform.any_op ) -> !transform.op <" func.func" >
0 commit comments