@@ -16,22 +16,27 @@ func.func @contiguous_inner_most_view(%in: memref<1x1x8x1xf32, strided<[3072, 8,
16
16
17
17
// -----
18
18
19
- func.func @contiguous_outer_dyn_inner_most_view (%in: memref <?x 1 x 8 x 1 x f32 , strided <[ 3072 , 8 , 1 , 1 ], offset : ?>> ) -> vector <1 x 8 x 1 x f32 > {
19
+ func.func @contiguous_outer_dyn_inner_most_view (%a: index , %b: index , %memref: memref <?x?x 8 x 1 x f32 > ) -> vector <8 x 1 x f32 > {
20
20
%c0 = arith.constant 0 : index
21
- %cst = arith.constant 0.0 : f32
22
- %0 = vector.transfer_read %in [ %c0 , %c0 , %c0 , %c0 ], %cst {in_bounds = [true , true , true ]} : memref <?x 1 x 8 x 1 x f32 , strided <[ 3072 , 8 , 1 , 1 ], offset : ?>> , vector <1 x 8 x 1 x f32 >
23
- return %0 : vector <1 x 8 x 1 x f32 >
21
+ %pad = arith.constant 0.0 : f32
22
+ %v = vector.transfer_read %memref [ %a , %b , %c0 , %c0 ], %pad {in_bounds = [true , true ]} : memref <?x?x 8 x 1 x f32 > , vector <8 x 1 x f32 >
23
+ return %v : vector <8 x 1 x f32 >
24
24
}
25
- // CHECK: func @contiguous_outer_dyn_inner_most_view(
25
+ // CHECK: func.func @contiguous_outer_dyn_inner_most_view(
26
+ // CHECK-SAME: %[[IDX0:[a-zA-Z0-9]+]]
27
+ // CHECK-SAME: %[[IDX1:[a-zA-Z0-9]+]]
26
28
// CHECK-SAME: %[[SRC:[a-zA-Z0-9]+]]
27
- // CHECK-DAG: %[[C0:.+]] = arith.constant 0 : index
28
- // CHECK-DAG: %[[D0:.+]] = memref.dim %[[SRC]], %[[C0]]
29
- // CHECK: %[[SRC_0:.+]] = memref.subview %[[SRC]][0, 0, 0, 0] [%[[D0]], 1, 8, 1] [1, 1, 1, 1]
30
- // CHECK-SAME: memref<?x1x8x1xf32, strided<[3072, 8, 1, 1], offset: ?>> to memref<?x1x8xf32, strided<[3072, 8, 1], offset: ?>>
31
- // CHECK: %[[VEC:.+]] = vector.transfer_read %[[SRC_0]]
32
- // CHECK-SAME: memref<?x1x8xf32, strided<[3072, 8, 1], offset: ?>>, vector<1x8xf32>
33
- // CHECK: %[[RESULT:.+]] = vector.shape_cast %[[VEC]]
34
- // CHECK: return %[[RESULT]]
29
+ // CHECK-DAG: %[[C0:.+]] = arith.constant 0 : index
30
+ // CHECK-DAG: %[[C1:.+]] = arith.constant 1 : index
31
+ // CHECK-DAG: %[[PAD:.+]] = arith.constant 0.000000e+00 : f32
32
+ // CHECK: %[[D0:.+]] = memref.dim %[[SRC]], %[[C0]]
33
+ // CHECK: %[[D1:.+]] = memref.dim %[[SRC]], %[[C1]]
34
+ // CHECK: %[[VIEW:.+]] = memref.subview %[[SRC]][0, 0, 0, 0] [%[[D0]], %[[D1]], 8, 1] [1, 1, 1, 1]
35
+ // CHECK-SAME: memref<?x?x8x1xf32> to memref<?x?x8xf32, strided<[?, 8, 1], offset: ?>>
36
+ // CHECK: %[[VEC:.+]] = vector.transfer_read %[[VIEW]]
37
+ // CHECK-SAME: memref<?x?x8xf32, strided<[?, 8, 1], offset: ?>>, vector<8xf32>
38
+ // CHECK: %[[RESULT:.+]] = vector.shape_cast %[[VEC]]
39
+ // CHECK: return %[[RESULT]]
35
40
36
41
// -----
37
42
@@ -43,7 +48,7 @@ func.func @contiguous_inner_most_dim(%A: memref<16x1xf32>, %i:index, %j:index) -
43
48
}
44
49
// CHECK: func @contiguous_inner_most_dim(%[[SRC:.+]]: memref<16x1xf32>, %[[I:.+]]: index, %[[J:.+]]: index) -> vector<8x1xf32>
45
50
// CHECK: %[[SRC_0:.+]] = memref.subview %[[SRC]]
46
- // CHECK-SAME: memref<16x1xf32> to memref<16xf32>
51
+ // CHECK-SAME: memref<16x1xf32> to memref<16xf32, strided<[1]> >
47
52
// CHECK: %[[V:.+]] = vector.transfer_read %[[SRC_0]]
48
53
// CHECK: %[[RESULT]] = vector.shape_cast %[[V]] : vector<8xf32> to vector<8x1xf32>
49
54
// CHECK: return %[[RESULT]]
@@ -111,7 +116,7 @@ func.func @drop_two_inner_most_dim_for_transfer_write(%arg0: memref<1x512x16x1x1
111
116
// CHECK-SAME: %[[IDX:[a-zA-Z0-9]+]]
112
117
// CHECK-DAG: %[[C0:.+]] = arith.constant 0 : index
113
118
// CHECK: %[[SUBVIEW:.+]] = memref.subview %[[DEST]]
114
- // CHECK-SAME: memref<1x512x16x1x1xf32> to memref<1x512x16xf32>
119
+ // CHECK-SAME: memref<1x512x16x1x1xf32> to memref<1x512x16xf32, strided<[8192, 16, 1]> >
115
120
// CHECK: %[[CAST:.+]] = vector.shape_cast %[[VEC]] : vector<1x16x16x1x1xf32> to vector<1x16x16xf32>
116
121
// CHECK: vector.transfer_write %[[CAST]], %[[SUBVIEW]]
117
122
// CHECK-SAME: [%[[C0]], %[[IDX]], %[[C0]]]
0 commit comments