1
1
// RUN: mlir-opt %s --transform-interpreter --split-input-file | FileCheck %s
2
2
3
+ /// CHECK: #[[$MAP:.*]] = affine_map<(d0, d1, d2, d3) -> (d1, 0, d3)>
4
+
3
5
///----------------------------------------------------------------------------------------
4
- /// vector.transfer_write -> vector.transpose + vector.transfer_write
5
6
/// [Pattern: TransferWritePermutationLowering]
7
+ ///
8
+ /// IN: vector.transfer_write (_transposed_ minor identity permutation map)
9
+ /// OUT: vector.transpose + vector.transfer_write (minor identity permutation map)
6
10
///----------------------------------------------------------------------------------------
7
- /// Input:
8
- /// * vector.transfer_write op with a permutation that under a transpose
9
- /// _would be_ a minor identity permutation map
10
- /// Output:
11
- /// * vector.transpose + vector.transfer_write with a permutation map which
12
- /// _is_ a minor identity
13
-
14
- // CHECK-LABEL: func.func @xfer_write_transposing_permutation_map
11
+
12
+ // CHECK-LABEL: func.func @xfer_write_minor_identity_transposed
15
13
// CHECK-SAME: %[[VEC:.*]]: vector<4x8xi16>,
16
14
// CHECK-SAME: %[[MEM:.*]]: memref<2x2x8x4xi16>
17
15
// CHECK: %[[TR:.*]] = vector.transpose %[[VEC]], [1, 0] : vector<4x8xi16> to vector<8x4xi16>
18
16
// CHECK: vector.transfer_write
19
17
// CHECK-NOT: permutation_map
20
18
// CHECK-SAME: %[[TR]], %[[MEM]]{{.*}} {in_bounds = [true, true]} : vector<8x4xi16>, memref<2x2x8x4xi16>
21
- func.func @xfer_write_transposing_permutation_map (
19
+ func.func @xfer_write_minor_identity_transposed (
22
20
%vec: vector <4 x8 xi16 >,
23
21
%mem: memref <2 x2 x8 x4 xi16 >,
24
22
%idx: index ) {
@@ -33,7 +31,7 @@ func.func @xfer_write_transposing_permutation_map(
33
31
34
32
// Even with out-of-bounds accesses, it is safe to apply this pattern
35
33
36
- // CHECK-LABEL: func.func @xfer_write_transposing_permutation_map_out_of_bounds
34
+ // CHECK-LABEL: func.func @xfer_write_minor_identity_transposed_out_of_bounds
37
35
// CHECK-SAME: %[[VEC:.*]]: vector<4x8xi16>,
38
36
// CHECK-SAME: %[[MEM:.*]]: memref<2x2x?x?xi16>,
39
37
// CHECK-SAME: %[[IDX:.*]]: index) {
@@ -44,7 +42,7 @@ func.func @xfer_write_transposing_permutation_map(
44
42
// CHECK: vector.transfer_write
45
43
// CHECK-NOT: permutation_map
46
44
// CHECK-SAME: %[[TR]], %[[MEM]][%[[IDX]], %[[IDX]], %[[IDX]], %[[IDX]]] : vector<8x4xi16>, memref<2x2x?x?xi16>
47
- func.func @xfer_write_transposing_permutation_map_out_of_bounds (
45
+ func.func @xfer_write_minor_identity_transposed_out_of_bounds (
48
46
%vec: vector <4 x8 xi16 >,
49
47
%mem: memref <2 x2 x?x?xi16 >,
50
48
%idx: index ) {
@@ -57,15 +55,15 @@ func.func @xfer_write_transposing_permutation_map_out_of_bounds(
57
55
return
58
56
}
59
57
60
- // CHECK-LABEL: func.func @xfer_write_transposing_permutation_map_with_mask_scalable
58
+ // CHECK-LABEL: func.func @xfer_write_minor_identity_transposed_with_mask_scalable
61
59
// CHECK-SAME: %[[VEC:.*]]: vector<4x[8]xi16>,
62
60
// CHECK-SAME: %[[MEM:.*]]: memref<2x2x?x4xi16>,
63
61
// CHECK-SAME: %[[MASK:.*]]: vector<[8]x4xi1>
64
62
// CHECK: %[[TR:.*]] = vector.transpose %[[VEC]], [1, 0] : vector<4x[8]xi16> to vector<[8]x4xi16>
65
63
// CHECK: vector.transfer_write
66
64
// CHECK-NOT: permutation_map
67
65
// CHECK-SAME: %[[TR]], %[[MEM]]{{.*}}, %[[MASK]] {in_bounds = [true, true]} : vector<[8]x4xi16>, memref<2x2x?x4xi16>
68
- func.func @xfer_write_transposing_permutation_map_with_mask_scalable (
66
+ func.func @xfer_write_minor_identity_transposed_with_mask_scalable (
69
67
%vec: vector <4 x[8 ]xi16 >,
70
68
%mem: memref <2 x2 x?x4 xi16 >,
71
69
%mask: vector <[8 ]x4 xi1 >,
@@ -82,9 +80,9 @@ func.func @xfer_write_transposing_permutation_map_with_mask_scalable(
82
80
83
81
// Masked version is not supported
84
82
85
- // CHECK-LABEL: func.func @xfer_write_transposing_permutation_map_masked
83
+ // CHECK-LABEL: func.func @xfer_write_minor_identity_transposed_map_masked
86
84
// CHECK-NOT: vector.transpose
87
- func.func @xfer_write_transposing_permutation_map_masked (
85
+ func.func @xfer_write_minor_identity_transposed_map_masked (
88
86
%vec: vector <4 x8 xi16 >,
89
87
%mem: memref <2 x2 x8 x4 xi16 >,
90
88
%mask: vector <8 x4 xi1 >,
@@ -102,24 +100,24 @@ func.func @xfer_write_transposing_permutation_map_masked(
102
100
}
103
101
104
102
///----------------------------------------------------------------------------------------
105
- /// vector.transfer_write -> vector.broadcast + vector.transpose + vector.transfer_write
106
103
/// [Patterns: TransferWriteNonPermutationLowering + TransferWritePermutationLowering]
104
+ ///
105
+ /// IN: vector.transfer_write
106
+ /// (neither a minor identity nor transposed minor identity map)
107
+ /// OUT 1: vector.broadcast + vector.transfer_write
108
+ /// (transposed minor identity)
109
+ /// OUT 2: vector.transfer_write -> vector.broadcast + vector.transpose + vector.transfer_write
110
+ /// (minor identity)
107
111
///----------------------------------------------------------------------------------------
108
- /// Input:
109
- /// * vector.transfer_write op with a map which _is not_ a permutation of a
110
- /// minor identity
111
- /// Output:
112
- /// * vector.broadcast + vector.transpose + vector.transfer_write with a map
113
- /// which _is_ a permutation of a minor identity
114
-
115
- // CHECK-LABEL: func.func @xfer_write_non_transposing_permutation_map(
112
+
113
+ // CHECK-LABEL: func.func @xfer_write_non_minor_identity(
116
114
// CHECK-SAME: %[[MEM:.*]]: memref<?x?xf32>,
117
115
// CHECK-SAME: %[[VEC:.*]]: vector<7xf32>,
118
116
// CHECK-SAME: %[[IDX_1:.*]]: index, %[[IDX_2:.*]]: index) {
119
117
// CHECK: %[[BC:.*]] = vector.broadcast %[[VEC]] : vector<7xf32> to vector<1x7xf32>
120
118
// CHECK: %[[TR:.*]] = vector.transpose %[[BC]], [1, 0] : vector<1x7xf32> to vector<7x1xf32>
121
119
// CHECK: vector.transfer_write %[[TR]], %[[MEM]]{{\[}}%[[IDX_1]], %[[IDX_2]]] {in_bounds = [false, true]} : vector<7x1xf32>, memref<?x?xf32>
122
- func.func @xfer_write_non_transposing_permutation_map (
120
+ func.func @xfer_write_non_minor_identity (
123
121
%mem : memref <?x?xf32 >,
124
122
%vec : vector <7 xf32 >,
125
123
%idx_1 : index ,
@@ -134,7 +132,7 @@ func.func @xfer_write_non_transposing_permutation_map(
134
132
135
133
// Even with out-of-bounds accesses, it is safe to apply this pattern
136
134
137
- // CHECK-LABEL: func.func @xfer_write_non_transposing_permutation_map_with_mask_out_of_bounds (
135
+ // CHECK-LABEL: func.func @xfer_write_non_minor_identity_with_mask_out_of_bounds (
138
136
// CHECK-SAME: %[[MEM:.*]]: memref<?x?xf32>,
139
137
// CHECK-SAME: %[[VEC:.*]]: vector<7xf32>,
140
138
// CHECK-SAME: %[[IDX_1:.*]]: index, %[[IDX_2:.*]]: index,
@@ -144,7 +142,7 @@ func.func @xfer_write_non_transposing_permutation_map(
144
142
// CHECK: %[[TR_MASK:.*]] = vector.transpose %[[BC_MASK]], [1, 0] : vector<1x7xi1> to vector<7x1xi1>
145
143
// CHECK: %[[TR_VEC:.*]] = vector.transpose %[[BC_VEC]], [1, 0] : vector<1x7xf32> to vector<7x1xf32>
146
144
// CHECK: vector.transfer_write %[[TR_VEC]], %[[MEM]]{{\[}}%[[IDX_1]], %[[IDX_2]]], %[[TR_MASK]] {in_bounds = [false, true]} : vector<7x1xf32>, memref<?x?xf32>
147
- func.func @xfer_write_non_transposing_permutation_map_with_mask_out_of_bounds (
145
+ func.func @xfer_write_non_minor_identity_with_mask_out_of_bounds (
148
146
%mem : memref <?x?xf32 >,
149
147
%vec : vector <7 xf32 >,
150
148
%idx_1 : index ,
@@ -159,7 +157,7 @@ func.func @xfer_write_non_transposing_permutation_map_with_mask_out_of_bounds(
159
157
return
160
158
}
161
159
162
- // CHECK: func.func @permutation_with_mask_xfer_write_scalable (
160
+ // CHECK-LABEL : func.func @xfer_write_non_minor_identity_with_mask_scalable (
163
161
// CHECK-SAME: %[[VEC:.*]]: vector<4x[8]xi16>,
164
162
// CHECK-SAME: %[[MEM:.*]]: memref<1x4x?x1xi16>,
165
163
// CHECK-SAME: %[[MASK:.*]]: vector<4x[8]xi1>
@@ -168,7 +166,7 @@ func.func @xfer_write_non_transposing_permutation_map_with_mask_out_of_bounds(
168
166
// CHECK: %[[TRANSPOSE_1:.*]] = vector.transpose %[[BC_2]], [1, 2, 0] : vector<1x4x[8]xi1> to vector<4x[8]x1xi1>
169
167
// CHECK: %[[TRANSPOSE_2:.*]] = vector.transpose %[[BC_1]], [1, 2, 0] : vector<1x4x[8]xi16> to vector<4x[8]x1xi16>
170
168
// CHECK: vector.transfer_write %[[TRANSPOSE_2]], %[[MEM]]{{.*}}, %[[TRANSPOSE_1]] {in_bounds = [true, true, true]} : vector<4x[8]x1xi16>, memref<1x4x?x1xi16>
171
- func.func @permutation_with_mask_xfer_write_scalable (
169
+ func.func @xfer_write_non_minor_identity_with_mask_scalable (
172
170
%vec: vector <4 x[8 ]xi16 >,
173
171
%mem: memref <1 x4 x?x1 xi16 >,
174
172
%mask: vector <4 x[8 ]xi1 >,
@@ -184,14 +182,14 @@ func.func @permutation_with_mask_xfer_write_scalable(
184
182
185
183
// Masked version is not supported
186
184
187
- // CHECK-LABEL: func @masked_permutation_xfer_write_fixed_width
185
+ // CHECK-LABEL: func @xfer_write_non_minor_identity_masked
188
186
// CHECK-SAME: %[[DEST:.*]]: tensor<?x?xf32>,
189
187
// CHECK-SAME: %[[VEC:.*]]: vector<16xf32>,
190
188
// CHECK-SAME: %[[IDX:.*]]: index,
191
189
// CHECK-SAME: %[[MASK:.*]]: vector<16xi1>
192
190
// CHECK-NOT: vector.transpose
193
191
// CHECK: vector.mask %[[MASK]] { vector.transfer_write %[[VEC]], %[[DEST]]{{.*}} vector<16xf32>, tensor<?x?xf32> } : vector<16xi1> -> tensor<?x?xf32>
194
- func.func @masked_permutation_xfer_write_fixed_width (
192
+ func.func @xfer_write_non_minor_identity_masked (
195
193
%dest: tensor <?x?xf32 >,
196
194
%vec: vector <16 xf32 >,
197
195
%idx: index ,
@@ -206,14 +204,14 @@ func.func @masked_permutation_xfer_write_fixed_width(
206
204
return %res : tensor <?x?xf32 >
207
205
}
208
206
209
- // CHECK-LABEL: func.func @masked_permutation_xfer_write_scalable(
207
+ // CHECK-LABEL: func.func @xfer_write_non_minor_identity_masked_scalable
210
208
// CHECK-SAME: %[[VEC:.*]]: vector<4x[8]xi16>,
211
209
// CHECK-SAME: %[[DEST:.*]]: tensor<?x?x?x?xf32>,
212
210
// CHECK-SAME: %[[MASK:.*]]: vector<4x[8]xi1>
213
211
// CHECK-SAME: -> tensor<?x?x?x?xf32> {
214
212
// CHECK-NOT: vector.transpose
215
213
// CHECK: vector.mask %[[MASK]] { vector.transfer_write %[[VEC]], %[[DEST]]{{.*}} : vector<4x[8]xi16>, tensor<?x?x?x?xf32> } : vector<4x[8]xi1> -> tensor<?x?x?x?xf32>
216
- func.func @masked_permutation_xfer_write_scalable (
214
+ func.func @xfer_write_non_minor_identity_masked_scalable (
217
215
%vec: vector <4 x[8 ]xi16 >,
218
216
%dest: tensor <?x?x?x?xf32 >,
219
217
%mask: vector <4 x[8 ]xi1 >,
@@ -232,13 +230,13 @@ func.func @masked_permutation_xfer_write_scalable(
232
230
233
231
// Masked version is not supported
234
232
235
- // CHECK-LABEL: func @masked_non_permutation_xfer_write_fixed_width
233
+ // CHECK-LABEL: func @xfer_write_non_minor_identity_masked_2
236
234
// CHECK-SAME: %[[DEST:.*]]: tensor<?x?x?x?xf32>
237
235
// CHECK-SAME: %[[VEC:.*]]: vector<14x8x16xf32>
238
236
// CHECK-SAME: %[[DIM:.*]]: index, %[[IDX:.*]]: index) -> tensor<?x?x?x?xf32>
239
237
// CHECK-NOT: vector.broadcast
240
238
// CHECK: vector.mask %0 { vector.transfer_write %[[VEC]], %[[DEST]]{{.*}} : vector<14x8x16xf32>, tensor<?x?x?x?xf32> } : vector<14x8x16xi1> -> tensor<?x?x?x?xf32>
241
- func.func @masked_non_permutation_xfer_write_fixed_width (
239
+ func.func @xfer_write_non_minor_identity_masked_2 (
242
240
%dest : tensor <?x?x?x?xf32 >,
243
241
%vec : vector <14 x8 x16 xf32 >,
244
242
%dim : index ,
@@ -256,15 +254,17 @@ func.func @masked_non_permutation_xfer_write_fixed_width(
256
254
}
257
255
258
256
///----------------------------------------------------------------------------------------
259
- /// vector.transfer_read
257
+ /// [Pattern: TransferOpReduceRank (for leading 0 dim) +
258
+ /// TransferReadPermutationLowering (for transposed minor identity)]
259
+ ///
260
+ /// IN: vector.transfer_read
261
+ /// (_transposed_ minor identity permutation map, with 0 or more broadcast dims)
262
+ /// OUT: vector.transpose + vector.transfer_write
263
+ /// (minor identity permutation map with 0 or more leading broadcast dims)
260
264
///----------------------------------------------------------------------------------------
261
- /// Input:
262
- /// * vector.transfer_read op with a permutation map
263
- /// Output:
264
- /// * vector.transfer_read with a permutation map composed of leading zeros followed by a minor identiy +
265
- /// vector.transpose op
265
+ /// TODO: Inner broadcast dim - see also the block at the bottom of this file
266
266
267
- // CHECK-LABEL: func.func @permutation_with_mask_xfer_read_fixed_width(
267
+ // CHECK-LABEL: func.func @xfer_read_minor_identity_tranposed_with_mask
268
268
// CHECK-SAME: %[[MEM:.*]]: memref<?x?xf32>,
269
269
// CHECK-SAME: %[[DIM_1:.*]]: index, %[[DIM_2:.*]]: index, %[[IDX:.*]]: index) -> vector<8x4x2xf32> {
270
270
// CHECK: %[[PASS_THROUGH:.*]] = arith.constant 0.000000e+00 : f32
@@ -273,7 +273,7 @@ func.func @masked_non_permutation_xfer_write_fixed_width(
273
273
// CHECK: %[[BCAST:.*]] = vector.broadcast %[[T_READ]] : vector<2x4xf32> to vector<8x2x4xf32>
274
274
// CHECK: %[[TRANSPOSE:.*]] = vector.transpose %[[BCAST]], [0, 2, 1] : vector<8x2x4xf32> to vector<8x4x2xf32>
275
275
// CHECK: return %[[TRANSPOSE]] : vector<8x4x2xf32>
276
- func.func @permutation_with_mask_xfer_read_fixed_width (
276
+ func.func @xfer_read_minor_identity_tranposed_with_mask (
277
277
%mem: memref <?x?xf32 >,
278
278
%dim_1: index ,
279
279
%dim_2: index ,
@@ -290,7 +290,7 @@ func.func @permutation_with_mask_xfer_read_fixed_width(
290
290
return %res : vector <8 x4 x2 xf32 >
291
291
}
292
292
293
- // CHECK-LABEL: func.func @permutation_with_mask_xfer_read_scalable (
293
+ // CHECK-LABEL: func.func @xfer_read_minor_identity_tranposed_with_mask_scalable (
294
294
// CHECK-SAME: %[[MEM:.*]]: memref<?x?xf32>,
295
295
// CHECK-SAME: %[[DIM_1:.*]]: index, %[[DIM_2:.*]]: index, %[[IDX:.*]]: index) -> vector<8x[4]x2xf32> {
296
296
// CHECK: %[[PAD:.*]] = arith.constant 0.000000e+00 : f32
@@ -299,7 +299,7 @@ func.func @permutation_with_mask_xfer_read_fixed_width(
299
299
// CHECK: %[[BCAST:.*]] = vector.broadcast %[[T_READ]] : vector<2x[4]xf32> to vector<8x2x[4]xf32>
300
300
// CHECK: %[[TRANSPOSE:.*]] = vector.transpose %[[BCAST]], [0, 2, 1] : vector<8x2x[4]xf32> to vector<8x[4]x2xf32>
301
301
// CHECK: return %[[TRANSPOSE]] : vector<8x[4]x2xf32>
302
- func.func @permutation_with_mask_xfer_read_scalable (
302
+ func.func @xfer_read_minor_identity_tranposed_with_mask_scalable (
303
303
%mem: memref <?x?xf32 >,
304
304
%dim_1: index ,
305
305
%dim_2: index ,
@@ -318,12 +318,12 @@ func.func @permutation_with_mask_xfer_read_scalable(
318
318
319
319
// Masked version is not supported
320
320
321
- // CHECK-LABEL: func @masked_permutation_xfer_read_fixed_width
321
+ // CHECK-LABEL: func @xfer_read_minor_identity_transposed_masked(
322
322
// CHECK-SAME: %[[DEST:.*]]: tensor<?x1xf32>,
323
323
// CHECK-SAME: %[[MASK:.*]]: vector<4x1xi1>
324
324
// CHECK-NOT: vector.transpose
325
325
// CHECK: vector.mask %[[MASK]] { vector.transfer_read %[[DEST]]{{.*}}: tensor<?x1xf32>, vector<1x4x4xf32> } : vector<4x1xi1> -> vector<1x4x4xf32>
326
- func.func @masked_permutation_xfer_read_fixed_width (
326
+ func.func @xfer_read_minor_identity_transposed_masked (
327
327
%dest: tensor <?x1 xf32 >,
328
328
%mask : vector <4 x1 xi1 >,
329
329
%idx: index ) {
@@ -339,12 +339,12 @@ func.func @masked_permutation_xfer_read_fixed_width(
339
339
return
340
340
}
341
341
342
- // CHECK-LABEL: func.func @masked_permutation_xfer_read_scalable (
342
+ // CHECK-LABEL: func.func @xfer_read_minor_identity_transposed_masked_scalable (
343
343
// CHECK-SAME: %[[DEST:.*]]: tensor<?x?xf32>,
344
344
// CHECK-SAME: %[[MASK:.*]]: vector<2x[4]xi1>
345
345
// CHECK-NOT: vector.transpose
346
346
// CHECK: %[[T_READ:.*]] = vector.mask %[[MASK]] { vector.transfer_read %[[DEST]]{{.*}} : tensor<?x?xf32>, vector<8x[4]x2xf32> } : vector<2x[4]xi1> -> vector<8x[4]x2xf32>
347
- func.func @masked_permutation_xfer_read_scalable (
347
+ func.func @xfer_read_minor_identity_transposed_masked_scalable (
348
348
%dest: tensor <?x?xf32 >,
349
349
%mask : vector <2 x[4 ]xi1 >,
350
350
%idx: index ) -> vector <8 x[4 ]x2 xf32 > {
@@ -361,31 +361,17 @@ func.func @masked_permutation_xfer_read_scalable(
361
361
return %res : vector <8 x[4 ]x2 xf32 >
362
362
}
363
363
364
- module attributes {transform.with_named_sequence } {
365
- transform.named_sequence @__transform_main (%module_op: !transform.any_op {transform.readonly }) {
366
- %f = transform.structured.match ops {[" func.func" ]} in %module_op
367
- : (!transform.any_op ) -> !transform.any_op
368
- transform.apply_patterns to %f {
369
- transform.apply_patterns.vector.transfer_permutation_patterns
370
- } : !transform.any_op
371
- transform.yield
372
- }
373
- }
374
-
375
- // -----
376
-
377
364
///----------------------------------------------------------------------------------------
378
365
/// vector.transfer_read
379
366
///----------------------------------------------------------------------------------------
380
367
/// TODO: Review and categorize
381
368
382
- // CHECK: #[[MAP:.*]] = affine_map<(d0, d1, d2, d3) -> (d1, 0, d3)>
383
- // CHECK: func.func @transfer_read_reduce_rank_scalable(
369
+ // CHECK-LABEL: func.func @xfer_read_minor_identitiy_bcast_dims_scalable
384
370
// CHECK-SAME: %[[MEM:.*]]: memref<?x?x?x?xf32>, %[[IDX:.*]]: index) -> vector<8x[4]x2x3xf32> {
385
- // CHECK: %[[T_READ:.*]] = vector.transfer_read %[[MEM]][%[[IDX]], %[[IDX]], %[[IDX]], %[[IDX]]]{{.*}} permutation_map = #[[MAP]]} : memref<?x?x?x?xf32>, vector<[4]x2x3xf32>
371
+ // CHECK: %[[T_READ:.*]] = vector.transfer_read %[[MEM]][%[[IDX]], %[[IDX]], %[[IDX]], %[[IDX]]]{{.*}} permutation_map = #[[$ MAP]]} : memref<?x?x?x?xf32>, vector<[4]x2x3xf32>
386
372
// CHECK: %[[BC:.*]] = vector.broadcast %[[T_READ]] : vector<[4]x2x3xf32> to vector<8x[4]x2x3xf32>
387
373
// CHECK: return %[[BC]] : vector<8x[4]x2x3xf32>
388
- func.func @transfer_read_reduce_rank_scalable (
374
+ func.func @xfer_read_minor_identitiy_bcast_dims_scalable (
389
375
%mem: memref <?x?x?x?xf32 >, %idx: index ) -> vector <8 x[4 ]x2 x3 xf32 > {
390
376
391
377
%pad = arith.constant 0.000000e+00 : f32
@@ -400,13 +386,13 @@ func.func @transfer_read_reduce_rank_scalable(
400
386
401
387
// Masked version is not supported
402
388
403
- // CHECK-LABEL: func.func @masked_transfer_read_reduce_rank(
389
+ // CHECK-LABEL: func.func @xfer_read_minor_identitiy_bcast_dims_masked
404
390
// CHECK-SAME: %[[MEM:.*]]: memref<?x?x?x?xf32>,
405
391
// CHECK-SAME: %[[DIM:.*]]: index,
406
392
// CHECK-SAME: %[[IDX:.*]]: index) -> vector<8x[4]x2x3xf32> {
407
393
// CHECK-NOT: vector.broadcast
408
394
// CHECK: %[[MASK:.*]] = vector.mask %0 { vector.transfer_read %[[MEM]]{{.*}} : memref<?x?x?x?xf32>, vector<8x[4]x2x3xf32> } : vector<[4]x3xi1> -> vector<8x[4]x2x3xf32>
409
- func.func @masked_transfer_read_reduce_rank (
395
+ func.func @xfer_read_minor_identitiy_bcast_dims_masked (
410
396
%mem: memref <?x?x?x?xf32 >,
411
397
%dim: index ,
412
398
%idx: index ) -> vector <8 x[4 ]x2 x3 xf32 > {
0 commit comments