@@ -143,6 +143,37 @@ func.func @read_write_add_index_interleaved(%arg0: memref<8xi32>, %arg1: memref<
143143}
144144
145145
146+ #map0 = affine_map <()[s0 , s1 ] -> (s1 * s0 )>
147+ #map1 = affine_map <()[s0 , s1 ] -> (s1 * s0 + 1 )>
148+ #map2 = affine_map <()[s0 , s1 ] -> (s1 * s0 + 2 )>
149+ #map3 = affine_map <()[s0 , s1 ] -> (s1 * s0 + 3 )>
150+
151+ // CHECK-LABEL: func @read_write_affine_apply
152+ // CHECK-SAME: (%[[ARG0:.*]]: memref<8xi32>, %[[ARG1:.*]]: memref<8xi32>, %[[ARG2:.*]]: index, %[[ARG3:.*]]: index)
153+ func.func @read_write_affine_apply (%arg0: memref <8 xi32 >, %arg1: memref <8 xi32 >, %arg2: index , %arg3: index ) {
154+ // CHECK: %[[IDX:.*]] = affine.apply #{{.*}}()[%[[ARG2]], %[[ARG3]]]
155+ // CHECK: %[[RES:.*]] = vector.load %[[ARG0]][%[[IDX]]] : memref<8xi32>, vector<4xi32>
156+ // CHECK: vector.store %[[RES]], %[[ARG0]][%[[IDX]]] : memref<8xi32>, vector<4xi32>
157+
158+ %ind0 = affine.apply #map0 ()[%arg2 , %arg3 ]
159+ %ind1 = affine.apply #map1 ()[%arg2 , %arg3 ]
160+ %ind2 = affine.apply #map2 ()[%arg2 , %arg3 ]
161+ %ind3 = affine.apply #map3 ()[%arg2 , %arg3 ]
162+
163+ %0 = memref.load %arg0 [%ind0 ] : memref <8 xi32 >
164+ %1 = memref.load %arg0 [%ind1 ] : memref <8 xi32 >
165+ %2 = memref.load %arg0 [%ind2 ] : memref <8 xi32 >
166+ %3 = memref.load %arg0 [%ind3 ] : memref <8 xi32 >
167+
168+ memref.store %0 , %arg0 [%ind0 ] : memref <8 xi32 >
169+ memref.store %1 , %arg0 [%ind1 ] : memref <8 xi32 >
170+ memref.store %2 , %arg0 [%ind2 ] : memref <8 xi32 >
171+ memref.store %3 , %arg0 [%ind3 ] : memref <8 xi32 >
172+
173+ return
174+ }
175+
176+
146177// CHECK-LABEL: func @read_read_add
147178// CHECK-SAME: (%[[ARG0:.*]]: memref<8xi32>, %[[ARG1:.*]]: memref<8xi32>)
148179func.func @read_read_add (%arg0: memref <8 xi32 >, %arg1: memref <8 xi32 >) -> (i32 , i32 , i32 , i32 ) {
0 commit comments