Skip to content

Commit 2086f63

Browse files
committed
add test case for a one dimensional memory
1 parent 9483cb9 commit 2086f63

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// RUN: mlir-opt %s -split-input-file -affine-parallel-banking="banking-factor=2" | FileCheck %s
2+
3+
// CHECK: #[[$ATTR_0:.+]] = affine_map<(d0) -> (d0 mod 2)>
4+
// CHECK: #[[$ATTR_1:.+]] = affine_map<(d0) -> (d0 floordiv 2)>
5+
6+
// CHECK-LABEL: func.func @parallel_bank_one_dim(
7+
// CHECK: %[[VAL_0:arg0]]: memref<4xf32>,
8+
// CHECK: %[[VAL_1:arg1]]: memref<4xf32>,
9+
// CHECK: %[[VAL_2:arg2]]: memref<4xf32>,
10+
// CHECK: %[[VAL_3:arg3]]: memref<4xf32>) -> (memref<4xf32>, memref<4xf32>) {
11+
// CHECK: %[[VAL_4:.*]] = arith.constant 0.000000e+00 : f32
12+
// CHECK: %[[VAL_5:.*]] = memref.alloc() : memref<4xf32>
13+
// CHECK: %[[VAL_6:.*]] = memref.alloc() : memref<4xf32>
14+
// CHECK: affine.parallel (%[[VAL_7:.*]]) = (0) to (8) {
15+
// CHECK: %[[VAL_8:.*]] = affine.apply #[[$ATTR_0]](%[[VAL_7]])
16+
// CHECK: %[[VAL_9:.*]] = affine.apply #[[$ATTR_1]](%[[VAL_7]])
17+
// CHECK: %[[VAL_10:.*]] = scf.index_switch %[[VAL_8]] -> f32
18+
// CHECK: case 0 {
19+
// CHECK: %[[VAL_11:.*]] = affine.load %[[VAL_0]]{{\[}}%[[VAL_9]]] : memref<4xf32>
20+
// CHECK: scf.yield %[[VAL_11]] : f32
21+
// CHECK: }
22+
// CHECK: case 1 {
23+
// CHECK: %[[VAL_12:.*]] = affine.load %[[VAL_1]]{{\[}}%[[VAL_9]]] : memref<4xf32>
24+
// CHECK: scf.yield %[[VAL_12]] : f32
25+
// CHECK: }
26+
// CHECK: default {
27+
// CHECK: scf.yield %[[VAL_4]] : f32
28+
// CHECK: }
29+
// CHECK: %[[VAL_13:.*]] = affine.apply #[[$ATTR_0]](%[[VAL_7]])
30+
// CHECK: %[[VAL_14:.*]] = affine.apply #[[$ATTR_1]](%[[VAL_7]])
31+
// CHECK: %[[VAL_15:.*]] = scf.index_switch %[[VAL_13]] -> f32
32+
// CHECK: case 0 {
33+
// CHECK: %[[VAL_16:.*]] = affine.load %[[VAL_2]]{{\[}}%[[VAL_14]]] : memref<4xf32>
34+
// CHECK: scf.yield %[[VAL_16]] : f32
35+
// CHECK: }
36+
// CHECK: case 1 {
37+
// CHECK: %[[VAL_17:.*]] = affine.load %[[VAL_3]]{{\[}}%[[VAL_14]]] : memref<4xf32>
38+
// CHECK: scf.yield %[[VAL_17]] : f32
39+
// CHECK: }
40+
// CHECK: default {
41+
// CHECK: scf.yield %[[VAL_4]] : f32
42+
// CHECK: }
43+
// CHECK: %[[VAL_18:.*]] = arith.mulf %[[VAL_10]], %[[VAL_15]] : f32
44+
// CHECK: %[[VAL_19:.*]] = affine.apply #[[$ATTR_0]](%[[VAL_7]])
45+
// CHECK: %[[VAL_20:.*]] = affine.apply #[[$ATTR_1]](%[[VAL_7]])
46+
// CHECK: scf.index_switch %[[VAL_19]]
47+
// CHECK: case 0 {
48+
// CHECK: affine.store %[[VAL_18]], %[[VAL_5]]{{\[}}%[[VAL_20]]] : memref<4xf32>
49+
// CHECK: scf.yield
50+
// CHECK: }
51+
// CHECK: case 1 {
52+
// CHECK: affine.store %[[VAL_18]], %[[VAL_6]]{{\[}}%[[VAL_20]]] : memref<4xf32>
53+
// CHECK: scf.yield
54+
// CHECK: }
55+
// CHECK: default {
56+
// CHECK: }
57+
// CHECK: }
58+
// CHECK: return %[[VAL_5]], %[[VAL_6]] : memref<4xf32>, memref<4xf32>
59+
// CHECK: }
60+
func.func @parallel_bank_one_dim(%arg0: memref<8xf32>, %arg1: memref<8xf32>) -> (memref<8xf32>) {
61+
%mem = memref.alloc() : memref<8xf32>
62+
affine.parallel (%i) = (0) to (8) {
63+
%1 = affine.load %arg0[%i] : memref<8xf32>
64+
%2 = affine.load %arg1[%i] : memref<8xf32>
65+
%3 = arith.mulf %1, %2 : f32
66+
affine.store %3, %mem[%i] : memref<8xf32>
67+
}
68+
return %mem : memref<8xf32>
69+
}

0 commit comments

Comments
 (0)