1
1
// RUN: mlir-opt %s -test-compose-subview -split-input-file | FileCheck %s
2
2
3
- func.func @main (%input: memref <4 x1024 xf32 >) -> memref <1 x128 xf32 , strided <[1024 , 1 ], offset : 3456 >> {
4
- // CHECK: subview %arg0[3, 384] [1, 128] [1, 1]
5
- // CHECK-SAME: memref<4x1024xf32> to memref<1x128xf32, strided<[1024, 1], offset: 3456>>
3
+ // CHECK-LABEL: func.func @subview_strided(
4
+ // CHECK-SAME: %[[VAL_0:.*]]: memref<4x1024xf32>) -> memref<1x128xf32, strided<[1024, 1], offset: 3456>> {
5
+ func.func @subview_strided (%input: memref <4 x1024 xf32 >) -> memref <1 x128 xf32 , strided <[1024 , 1 ], offset : 3456 >> {
6
+ // CHECK: %[[VAL_1:.*]] = memref.subview %[[VAL_0]][3, 384] [1, 128] [1, 1] : memref<4x1024xf32> to memref<1x128xf32, strided<[1024, 1], offset: 3456>>
6
7
%0 = memref.subview %input [2 , 256 ] [2 , 256 ] [1 , 1 ] : memref <4 x1024 xf32 > to memref <2 x256 xf32 , strided <[1024 , 1 ], offset : 2304 >>
7
8
%1 = memref.subview %0 [1 , 128 ] [1 , 128 ] [1 , 1 ] : memref <2 x256 xf32 , strided <[1024 , 1 ], offset : 2304 >> to memref <1 x128 xf32 , strided <[1024 , 1 ], offset : 3456 >>
8
9
return %1 : memref <1 x128 xf32 , strided <[1024 , 1 ], offset : 3456 >>
9
10
}
10
11
11
12
// -----
12
13
13
- func.func @main (%input: memref <4 x1024 xf32 >) -> memref <1 x10 xf32 , strided <[1024 , 1 ], offset : 3745 >> {
14
- // CHECK: subview %arg0[3, 673] [1, 10] [1, 1]
15
- // CHECK-SAME: memref<4x1024xf32> to memref<1x10xf32, strided<[1024, 1], offset: 3745>>
14
+ // CHECK-LABEL: func.func @subview_strided(
15
+ // CHECK-SAME: %[[VAL_0:.*]]: memref<4x1024xf32>) -> memref<1x10xf32, strided<[1024, 1], offset: 3745>> {
16
+ func.func @subview_strided (%input: memref <4 x1024 xf32 >) -> memref <1 x10 xf32 , strided <[1024 , 1 ], offset : 3745 >> {
17
+ // CHECK: %[[VAL_1:.*]] = memref.subview %[[VAL_0]][3, 673] [1, 10] [1, 1] : memref<4x1024xf32> to memref<1x10xf32, strided<[1024, 1], offset: 3745>>
16
18
%0 = memref.subview %input [1 , 512 ] [3 , 256 ] [1 , 1 ] : memref <4 x1024 xf32 > to memref <3 x256 xf32 , strided <[1024 , 1 ], offset : 1536 >>
17
19
%1 = memref.subview %0 [1 , 128 ] [2 , 128 ] [1 , 1 ] : memref <3 x256 xf32 , strided <[1024 , 1 ], offset : 1536 >> to memref <2 x128 xf32 , strided <[1024 , 1 ], offset : 2688 >>
18
20
%2 = memref.subview %1 [1 , 33 ] [1 , 10 ] [1 , 1 ] : memref <2 x128 xf32 , strided <[1024 , 1 ], offset : 2688 >> to memref <1 x10 xf32 , strided <[1024 , 1 ], offset : 3745 >>
@@ -21,27 +23,81 @@ func.func @main(%input: memref<4x1024xf32>) -> memref<1x10xf32, strided<[1024, 1
21
23
22
24
// -----
23
25
24
- func.func @main (%input: memref <4 x1024 xf32 >) -> memref <1 x128 xf32 , strided <[1024 , 1 ], offset : ?>> {
25
- // CHECK: [[CST_3:%.*]] = arith.constant 3 : index
26
+ // CHECK-LABEL: func.func @subview_strided(
27
+ // CHECK-SAME: %[[VAL_0:.*]]: memref<4x1024xf32>) -> memref<1x128xf32, strided<[1024, 1], offset: ?>> {
28
+ func.func @subview_strided (%input: memref <4 x1024 xf32 >) -> memref <1 x128 xf32 , strided <[1024 , 1 ], offset : ?>> {
29
+ // CHECK: %[[VAL_1:.*]] = arith.constant 3 : index
26
30
%cst_1 = arith.constant 1 : index
27
31
%cst_2 = arith.constant 2 : index
28
- // CHECK: subview %arg0{{\[}}[[CST_3]], 384] [1, 128] [1, 1]
29
- // CHECK-SAME: memref<4x1024xf32> to memref<1x128xf32, strided<[1024, 1], offset: ?>>
32
+ // CHECK: %[[VAL_2:.*]] = memref.subview %[[VAL_0]]{{\[}}%[[VAL_1]], 384] [1, 128] [1, 1] : memref<4x1024xf32> to memref<1x128xf32, strided<[1024, 1], offset: ?>>
30
33
%0 = memref.subview %input [%cst_2 , 256 ] [2 , 256 ] [1 , 1 ] : memref <4 x1024 xf32 > to memref <2 x256 xf32 , strided <[1024 , 1 ], offset : ?>>
31
34
%1 = memref.subview %0 [%cst_1 , 128 ] [1 , 128 ] [1 , 1 ] : memref <2 x256 xf32 , strided <[1024 , 1 ], offset : ?>> to memref <1 x128 xf32 , strided <[1024 , 1 ], offset : ?>>
32
35
return %1 : memref <1 x128 xf32 , strided <[1024 , 1 ], offset : ?>>
33
36
}
34
37
35
38
// -----
36
39
37
- func.func @main (%input: memref <4 x1024 xf32 >) -> memref <1 x128 xf32 , strided <[1024 , 1 ], offset : ?>> {
38
- // CHECK: [[CST_3:%.*]] = arith.constant 3 : index
40
+ // CHECK-LABEL: func.func @subview_strided(
41
+ // CHECK-SAME: %[[VAL_0:.*]]: memref<4x1024xf32>) -> memref<1x128xf32, strided<[1024, 1], offset: ?>> {
42
+ func.func @subview_strided (%input: memref <4 x1024 xf32 >) -> memref <1 x128 xf32 , strided <[1024 , 1 ], offset : ?>> {
43
+ // CHECK: %[[VAL_1:.*]] = arith.constant 3 : index
39
44
%cst_2 = arith.constant 2 : index
40
- // CHECK: [[CST_384:% .*]] = arith.constant 384 : index
45
+ // CHECK: %[[VAL_2: .*]] = arith.constant 384 : index
41
46
%cst_128 = arith.constant 128 : index
42
- // CHECK: subview %arg0{{\[}}[[CST_3]], [[CST_384]]] [1, 128] [1, 1]
43
- // CHECK-SAME: memref<4x1024xf32> to memref<1x128xf32, strided<[1024, 1], offset: ?>>
47
+ // CHECK: %[[VAL_3:.*]] = memref.subview %[[VAL_0]]{{\[}}%[[VAL_1]], %[[VAL_2]]] [1, 128] [1, 1] : memref<4x1024xf32> to memref<1x128xf32, strided<[1024, 1], offset: ?>>
44
48
%0 = memref.subview %input [%cst_2 , 256 ] [2 , 256 ] [1 , 1 ] : memref <4 x1024 xf32 > to memref <2 x256 xf32 , strided <[1024 , 1 ], offset : ?>>
45
49
%1 = memref.subview %0 [1 , %cst_128 ] [1 , 128 ] [1 , 1 ] : memref <2 x256 xf32 , strided <[1024 , 1 ], offset : ?>> to memref <1 x128 xf32 , strided <[1024 , 1 ], offset : ?>>
46
50
return %1 : memref <1 x128 xf32 , strided <[1024 , 1 ], offset : ?>>
47
51
}
52
+
53
+ // -----
54
+
55
+ // CHECK-LABEL: func.func @subview_strided(
56
+ // CHECK-SAME: %[[VAL_0:.*]]: memref<4x1024xf32>) -> memref<1x64xf32, strided<[4096, 4], offset: 4480>> {
57
+ func.func @subview_strided (%input: memref <4 x1024 xf32 >) -> memref <1 x64 xf32 , strided <[4096 , 4 ], offset : 4480 >> {
58
+ // CHECK: %[[VAL_1:.*]] = memref.subview %[[VAL_0]][4, 384] [1, 64] [4, 4] : memref<4x1024xf32> to memref<1x64xf32, strided<[4096, 4], offset: 4480>>
59
+ %0 = memref.subview %input [2 , 256 ] [2 , 256 ] [2 , 2 ] : memref <4 x1024 xf32 > to memref <2 x256 xf32 , strided <[2048 , 2 ], offset : 2304 >>
60
+ %1 = memref.subview %0 [1 , 64 ] [1 , 64 ] [2 , 2 ] : memref <2 x256 xf32 , strided <[2048 , 2 ], offset : 2304 >> to memref <1 x64 xf32 , strided <[4096 , 4 ], offset : 4480 >>
61
+ return %1 : memref <1 x64 xf32 , strided <[4096 , 4 ], offset : 4480 >>
62
+ }
63
+
64
+ // -----
65
+
66
+ // CHECK-LABEL: func.func @subview_strided(
67
+ // CHECK-SAME: %[[VAL_0:.*]]: memref<30x30xf32>) -> memref<2x2xf32, strided<[240, 8], offset: 217>> {
68
+ func.func @subview_strided (%input: memref <30 x30 xf32 >) -> memref <2 x2 xf32 , strided <[240 , 8 ], offset : 217 >> {
69
+ // CHECK: %[[VAL_1:.*]] = memref.subview %[[VAL_0]][7, 7] [2, 2] [8, 8] : memref<30x30xf32> to memref<2x2xf32, strided<[240, 8], offset: 217>>
70
+ %0 = memref.subview %input [1 , 1 ] [12 , 12 ] [2 , 2 ] : memref <30 x30 xf32 > to memref <12 x12 xf32 , strided <[60 , 2 ], offset : 31 >>
71
+ %1 = memref.subview %0 [1 , 1 ] [5 , 5 ] [2 , 2 ] : memref <12 x12 xf32 , strided <[60 , 2 ], offset : 31 >> to memref <5 x5 xf32 , strided <[120 , 4 ], offset : 93 >>
72
+ %2 = memref.subview %1 [1 , 1 ] [2 , 2 ] [2 , 2 ] : memref <5 x5 xf32 , strided <[120 , 4 ], offset : 93 >> to memref <2 x2 xf32 , strided <[240 , 8 ], offset : 217 >>
73
+ return %2 : memref <2 x2 xf32 , strided <[240 , 8 ], offset : 217 >>
74
+ }
75
+
76
+ // -----
77
+
78
+ // CHECK-LABEL: func.func @subview_strided(
79
+ // CHECK-SAME: %[[VAL_0:.*]]: memref<4x1024xf32>) -> memref<1x64xf32, strided<[4096, 4], offset: ?>> {
80
+ func.func @subview_strided (%input: memref <4 x1024 xf32 >) -> memref <1 x64 xf32 , strided <[4096 , 4 ], offset : ?>> {
81
+ // CHECK: %[[VAL_1:.*]] = arith.constant 4 : index
82
+ %cst_2 = arith.constant 2 : index
83
+ // CHECK: %[[VAL_2:.*]] = arith.constant 384 : index
84
+ %cst_64 = arith.constant 64 : index
85
+ // CHECK: %[[VAL_3:.*]] = memref.subview %[[VAL_0]]{{\[}}%[[VAL_1]], %[[VAL_2]]] [1, 64] [4, 4] : memref<4x1024xf32> to memref<1x64xf32, strided<[4096, 4], offset: ?>>
86
+ %0 = memref.subview %input [%cst_2 , 256 ] [2 , 256 ] [2 , 2 ] : memref <4 x1024 xf32 > to memref <2 x256 xf32 , strided <[2048 , 2 ], offset : ?>>
87
+ %1 = memref.subview %0 [1 , %cst_64 ] [1 , 64 ] [2 , 2 ] : memref <2 x256 xf32 , strided <[2048 , 2 ], offset : ?>> to memref <1 x64 xf32 , strided <[4096 , 4 ], offset : ?>>
88
+ return %1 : memref <1 x64 xf32 , strided <[4096 , 4 ], offset : ?>>
89
+ }
90
+
91
+ // -----
92
+
93
+ // CHECK-LABEL: func.func @subview_strided(
94
+ // CHECK-SAME: %[[VAL_0:.*]]: memref<4x1024xf32>) -> memref<1x64xf32, strided<[4096, 4], offset: ?>> {
95
+ func.func @subview_strided (%input: memref <4 x1024 xf32 >) -> memref <1 x64 xf32 , strided <[4096 , 4 ], offset : ?>> {
96
+ // CHECK: %[[VAL_1:.*]] = arith.constant 4 : index
97
+ %cst_1 = arith.constant 1 : index
98
+ %cst_2 = arith.constant 2 : index
99
+ // CHECK: %[[VAL_2:.*]] = memref.subview %[[VAL_0]]{{\[}}%[[VAL_1]], 384] [1, 64] [4, 4] : memref<4x1024xf32> to memref<1x64xf32, strided<[4096, 4], offset: ?>>
100
+ %0 = memref.subview %input [%cst_2 , 256 ] [2 , 256 ] [2 , 2 ] : memref <4 x1024 xf32 > to memref <2 x256 xf32 , strided <[2048 , 2 ], offset : ?>>
101
+ %1 = memref.subview %0 [%cst_1 , 64 ] [1 , 64 ] [2 , 2 ] : memref <2 x256 xf32 , strided <[2048 , 2 ], offset : ?>> to memref <1 x64 xf32 , strided <[4096 , 4 ], offset : ?>>
102
+ return %1 : memref <1 x64 xf32 , strided <[4096 , 4 ], offset : ?>>
103
+ }
0 commit comments