Skip to content

Commit 662ee93

Browse files
author
Peiming Liu
committed
[mlir][sparse] extend codegen test cases with an additional step after storage expansion
Reviewed By: aartbik Differential Revision: https://reviews.llvm.org/D133219
1 parent 928b5b0 commit 662ee93

File tree

1 file changed

+151
-51
lines changed

1 file changed

+151
-51
lines changed

mlir/test/Dialect/SparseTensor/codegen.mlir

Lines changed: 151 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
// RUN: mlir-opt %s --sparse-tensor-codegen --canonicalize --cse | FileCheck %s
1+
// RUN: mlir-opt %s --sparse-tensor-codegen --canonicalize --cse | FileCheck %s --check-prefix=CHECK-CODEGEN
2+
// RUN: mlir-opt %s --sparse-tensor-codegen --sparse-tensor-storage-expansion --canonicalize --cse | FileCheck %s --check-prefix=CHECK-STORAGE
3+
24

35
#SparseVector = #sparse_tensor.encoding<{
46
dimLevelType = [ "compressed" ],
@@ -35,49 +37,96 @@
3537
dimOrdering = affine_map<(i, j, k) -> (k, i, j)>
3638
}>
3739

38-
// CHECK-LABEL: func @sparse_nop(
39-
// CHECK-SAME: %[[A:.*]]: tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
40-
// CHECK: return %[[A]] : tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>
40+
// CHECK-CODEGEN-LABEL: func @sparse_nop(
41+
// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
42+
// CHECK-CODEGEN: return %[[A]] : tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>
43+
//
44+
// CHECK-STORAGE-LABEL: func @sparse_nop(
45+
// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<1xindex>,
46+
// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
47+
// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
48+
// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xf64>)
49+
// CHECK-STORAGE: return %[[A0]], %[[A1]], %[[A2]], %[[A3]] : memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>
4150
func.func @sparse_nop(%arg0: tensor<?xf64, #SparseVector>) -> tensor<?xf64, #SparseVector> {
4251
return %arg0 : tensor<?xf64, #SparseVector>
4352
}
4453

45-
// CHECK-LABEL: func @sparse_nop_cast(
46-
// CHECK-SAME: %[[A:.*]]: tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf32>>)
47-
// CHECK: return %[[A]] : tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf32>>
54+
// CHECK-CODEGEN-LABEL: func @sparse_nop_cast(
55+
// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf32>>)
56+
// CHECK-CODEGEN: return %[[A]] : tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf32>>
57+
//
58+
// CHECK-STORAGE-LABEL: func @sparse_nop_cast(
59+
// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<1xindex>,
60+
// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
61+
// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
62+
// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xf32>)
63+
// CHECK-STORAGE: return %[[A0]], %[[A1]], %[[A2]], %[[A3]] : memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf32>
4864
func.func @sparse_nop_cast(%arg0: tensor<64xf32, #SparseVector>) -> tensor<?xf32, #SparseVector> {
4965
%0 = tensor.cast %arg0 : tensor<64xf32, #SparseVector> to tensor<?xf32, #SparseVector>
5066
return %0 : tensor<?xf32, #SparseVector>
5167
}
5268

53-
// CHECK-LABEL: func @sparse_nop_cast_3d(
54-
// CHECK-SAME: %[[A:.*]]: tuple<memref<3xindex>, memref<?xf32>>)
55-
// CHECK: return %[[A]] : tuple<memref<3xindex>, memref<?xf32>>
69+
// CHECK-CODEGEN-LABEL: func @sparse_nop_cast_3d(
70+
// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<3xindex>, memref<?xf32>>)
71+
// CHECK-CODEGEN: return %[[A]] : tuple<memref<3xindex>, memref<?xf32>>
72+
//
73+
// CHECK-STORAGE-LABEL: func @sparse_nop_cast_3d(
74+
// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<3xindex>,
75+
// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xf32>)
76+
// CHECK-STORAGE: return %[[A0]], %[[A1]] : memref<3xindex>, memref<?xf32>
5677
func.func @sparse_nop_cast_3d(%arg0: tensor<10x20x30xf32, #Dense3D>) -> tensor<?x?x?xf32, #Dense3D> {
5778
%0 = tensor.cast %arg0 : tensor<10x20x30xf32, #Dense3D> to tensor<?x?x?xf32, #Dense3D>
5879
return %0 : tensor<?x?x?xf32, #Dense3D>
5980
}
6081

61-
// CHECK-LABEL: func @sparse_dense_2d(
62-
// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xf64>>)
82+
// CHECK-CODEGEN-LABEL: func @sparse_dense_2d(
83+
// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xf64>>)
84+
//
85+
// CHECK-STORAGE-LABEL: func @sparse_dense_2d(
86+
// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
87+
// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xf64>) {
88+
// CHECK-STORAGE: return
6389
func.func @sparse_dense_2d(%arg0: tensor<?x?xf64, #Dense2D>) {
6490
return
6591
}
6692

67-
// CHECK-LABEL: func @sparse_row(
68-
// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
93+
// CHECK-CODEGEN-LABEL: func @sparse_row(
94+
// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
95+
//
96+
// CHECK-STORAGE-LABEL: func @sparse_row(
97+
// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
98+
// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
99+
// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
100+
// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xf64>) {
101+
// CHECK-STORAGE: return
69102
func.func @sparse_row(%arg0: tensor<?x?xf64, #Row>) {
70103
return
71104
}
72105

73-
// CHECK-LABEL: func @sparse_csr(
74-
// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
106+
// CHECK-CODEGEN-LABEL: func @sparse_csr(
107+
// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
108+
//
109+
// CHECK-STORAGE-LABEL: func @sparse_csr(
110+
// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
111+
// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
112+
// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
113+
// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xf64>) {
114+
// CHECK-STORAGE: return
75115
func.func @sparse_csr(%arg0: tensor<?x?xf64, #CSR>) {
76116
return
77117
}
78118

79-
// CHECK-LABEL: func @sparse_dcsr(
80-
// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
119+
// CHECK-CODEGEN-LABEL: func @sparse_dcsr(
120+
// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
121+
//
122+
// CHECK-STORAGE-LABEL: func @sparse_dcsr(
123+
// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
124+
// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
125+
// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
126+
// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xi32>,
127+
// CHECK-STORAGE-SAME: %[[A4:.*4]]: memref<?xi64>,
128+
// CHECK-STORAGE-SAME: %[[A5:.*5]]: memref<?xf64>) {
129+
// CHECK-STORAGE: return
81130
func.func @sparse_dcsr(%arg0: tensor<?x?xf64, #DCSR>) {
82131
return
83132
}
@@ -86,10 +135,16 @@ func.func @sparse_dcsr(%arg0: tensor<?x?xf64, #DCSR>) {
86135
// Querying for dimension 1 in the tensor type can immediately
87136
// fold using the original static dimension sizes.
88137
//
89-
// CHECK-LABEL: func @sparse_dense_3d(
90-
// CHECK-SAME: %[[A:.*]]: tuple<memref<3xindex>, memref<?xf64>>)
91-
// CHECK: %[[C:.*]] = arith.constant 20 : index
92-
// CHECK: return %[[C]] : index
138+
// CHECK-CODEGEN-LABEL: func @sparse_dense_3d(
139+
// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<3xindex>, memref<?xf64>>)
140+
// CHECK-CODEGEN: %[[C:.*]] = arith.constant 20 : index
141+
// CHECK-CODEGEN: return %[[C]] : index
142+
//
143+
// CHECK-STORAGE-LABEL: func @sparse_dense_3d(
144+
// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<3xindex>,
145+
// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xf64>)
146+
// CHECK-STORAGE: %[[C:.*]] = arith.constant 20 : index
147+
// CHECK-STORAGE: return %[[C]] : index
93148
func.func @sparse_dense_3d(%arg0: tensor<10x20x30xf64, #Dense3D>) -> index {
94149
%c = arith.constant 1 : index
95150
%0 = tensor.dim %arg0, %c : tensor<10x20x30xf64, #Dense3D>
@@ -101,58 +156,103 @@ func.func @sparse_dense_3d(%arg0: tensor<10x20x30xf64, #Dense3D>) -> index {
101156
// into querying for dimension 2 in the stored sparse tensor scheme,
102157
// since the latter honors the dimOrdering.
103158
//
104-
// CHECK-LABEL: func @sparse_dense_3d_dyn(
105-
// CHECK-SAME: %[[A:.*]]: tuple<memref<3xindex>, memref<?xf64>>)
106-
// CHECK: %[[C:.*]] = arith.constant 2 : index
107-
// CHECK: %[[F:.*]] = sparse_tensor.storage_get %[[A]][0] : tuple<memref<3xindex>, memref<?xf64>> to memref<3xindex>
108-
// CHECK: %[[L:.*]] = memref.load %[[F]][%[[C]]] : memref<3xindex>
109-
// CHECK: return %[[L]] : index
159+
// CHECK-CODEGEN-LABEL: func @sparse_dense_3d_dyn(
160+
// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<3xindex>, memref<?xf64>>)
161+
// CHECK-CODEGEN: %[[C:.*]] = arith.constant 2 : index
162+
// CHECK-CODEGEN: %[[F:.*]] = sparse_tensor.storage_get %[[A]][0] : tuple<memref<3xindex>, memref<?xf64>> to memref<3xindex>
163+
// CHECK-CODEGEN: %[[L:.*]] = memref.load %[[F]][%[[C]]] : memref<3xindex>
164+
// CHECK-CODEGEN: return %[[L]] : index
165+
//
166+
// CHECK-STORAGE-LABEL: func @sparse_dense_3d_dyn(
167+
// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<3xindex>,
168+
// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xf64>)
169+
// CHECK-STORAGE: %[[C:.*]] = arith.constant 2 : index
170+
// CHECK-STORAGE: %[[L:.*]] = memref.load %[[A0]][%[[C]]] : memref<3xindex>
171+
// CHECK-STORAGE: return %[[L]] : index
110172
func.func @sparse_dense_3d_dyn(%arg0: tensor<?x?x?xf64, #Dense3D>) -> index {
111173
%c = arith.constant 1 : index
112174
%0 = tensor.dim %arg0, %c : tensor<?x?x?xf64, #Dense3D>
113175
return %0 : index
114176
}
115177

116-
// CHECK-LABEL: func @sparse_pointers_dcsr(
117-
// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
118-
// CHECK: %[[F:.*]] = sparse_tensor.storage_get %[[A]][3] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xi32>
119-
// CHECK: return %[[F]] : memref<?xi32>
178+
// CHECK-CODEGEN-LABEL: func @sparse_pointers_dcsr(
179+
// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
180+
// CHECK-CODEGEN: %[[F:.*]] = sparse_tensor.storage_get %[[A]][3] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xi32>
181+
// CHECK-CODEGEN: return %[[F]] : memref<?xi32>
182+
//
183+
// CHECK-STORAGE-LABEL: func @sparse_pointers_dcsr(
184+
// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
185+
// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
186+
// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
187+
// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xi32>,
188+
// CHECK-STORAGE-SAME: %[[A4:.*4]]: memref<?xi64>,
189+
// CHECK-STORAGE-SAME: %[[A5:.*5]]: memref<?xf64>)
190+
// CHECK-STORAGE: return %[[A3]] : memref<?xi32>
120191
func.func @sparse_pointers_dcsr(%arg0: tensor<?x?xf64, #DCSR>) -> memref<?xi32> {
121192
%c = arith.constant 1 : index
122193
%0 = sparse_tensor.pointers %arg0, %c : tensor<?x?xf64, #DCSR> to memref<?xi32>
123194
return %0 : memref<?xi32>
124195
}
125196

126-
// CHECK-LABEL: func @sparse_indices_dcsr(
127-
// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
128-
// CHECK: %[[F:.*]] = sparse_tensor.storage_get %[[A]][4] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xi64>
129-
// CHECK: return %[[F]] : memref<?xi64>
197+
// CHECK-CODEGEN-LABEL: func @sparse_indices_dcsr(
198+
// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
199+
// CHECK-CODEGEN: %[[F:.*]] = sparse_tensor.storage_get %[[A]][4] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xi64>
200+
// CHECK-CODEGEN: return %[[F]] : memref<?xi64>
201+
//
202+
// CHECK-STORAGE-LABEL: func @sparse_indices_dcsr(
203+
// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
204+
// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
205+
// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
206+
// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xi32>,
207+
// CHECK-STORAGE-SAME: %[[A4:.*4]]: memref<?xi64>,
208+
// CHECK-STORAGE-SAME: %[[A5:.*5]]: memref<?xf64>)
209+
// CHECK-STORAGE: return %[[A4]] : memref<?xi64>
130210
func.func @sparse_indices_dcsr(%arg0: tensor<?x?xf64, #DCSR>) -> memref<?xi64> {
131211
%c = arith.constant 1 : index
132212
%0 = sparse_tensor.indices %arg0, %c : tensor<?x?xf64, #DCSR> to memref<?xi64>
133213
return %0 : memref<?xi64>
134214
}
135215

136-
// CHECK-LABEL: func @sparse_values_dcsr(
137-
// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
138-
// CHECK: %[[F:.*]] = sparse_tensor.storage_get %[[A]][5] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xf64>
139-
// CHECK: return %[[F]] : memref<?xf64>
216+
// CHECK-CODEGEN-LABEL: func @sparse_values_dcsr(
217+
// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
218+
// CHECK-CODEGEN: %[[F:.*]] = sparse_tensor.storage_get %[[A]][5] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xf64>
219+
// CHECK-CODEGEN: return %[[F]] : memref<?xf64>
220+
//
221+
// CHECK-STORAGE-LABEL: func @sparse_values_dcsr(
222+
// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
223+
// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
224+
// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
225+
// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xi32>,
226+
// CHECK-STORAGE-SAME: %[[A4:.*4]]: memref<?xi64>,
227+
// CHECK-STORAGE-SAME: %[[A5:.*5]]: memref<?xf64>)
228+
// CHECK-STORAGE: return %[[A5]] : memref<?xf64>
140229
func.func @sparse_values_dcsr(%arg0: tensor<?x?xf64, #DCSR>) -> memref<?xf64> {
141230
%0 = sparse_tensor.values %arg0 : tensor<?x?xf64, #DCSR> to memref<?xf64>
142231
return %0 : memref<?xf64>
143232
}
144233

145-
// CHECK-LABEL: func @sparse_dealloc_csr(
146-
// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
147-
// CHECK: %[[F0:.*]] = sparse_tensor.storage_get %[[A]][0] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<2xindex>
148-
// CHECK: memref.dealloc %[[F0]] : memref<2xindex>
149-
// CHECK: %[[F1:.*]] = sparse_tensor.storage_get %[[A]][1] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xi32>
150-
// CHECK: memref.dealloc %[[F1]] : memref<?xi32>
151-
// CHECK: %[[F2:.*]] = sparse_tensor.storage_get %[[A]][2] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xi64>
152-
// CHECK: memref.dealloc %[[F2]] : memref<?xi64>
153-
// CHECK: %[[F3:.*]] = sparse_tensor.storage_get %[[A]][3] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xf64>
154-
// CHECK: memref.dealloc %[[F3]] : memref<?xf64>
155-
// CHECK: return
234+
// CHECK-CODEGEN-LABEL: func @sparse_dealloc_csr(
235+
// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
236+
// CHECK-CODEGEN: %[[F0:.*]] = sparse_tensor.storage_get %[[A]][0] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<2xindex>
237+
// CHECK-CODEGEN: memref.dealloc %[[F0]] : memref<2xindex>
238+
// CHECK-CODEGEN: %[[F1:.*]] = sparse_tensor.storage_get %[[A]][1] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xi32>
239+
// CHECK-CODEGEN: memref.dealloc %[[F1]] : memref<?xi32>
240+
// CHECK-CODEGEN: %[[F2:.*]] = sparse_tensor.storage_get %[[A]][2] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xi64>
241+
// CHECK-CODEGEN: memref.dealloc %[[F2]] : memref<?xi64>
242+
// CHECK-CODEGEN: %[[F3:.*]] = sparse_tensor.storage_get %[[A]][3] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xf64>
243+
// CHECK-CODEGEN: memref.dealloc %[[F3]] : memref<?xf64>
244+
// CHECK-CODEGEN: return
245+
//
246+
// CHECK-STORAGE-LABEL: func @sparse_dealloc_csr(
247+
// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
248+
// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
249+
// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
250+
// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xf64>) {
251+
// CHECK-STORAGE: memref.dealloc %[[A0]] : memref<2xindex>
252+
// CHECK-STORAGE: memref.dealloc %[[A1]] : memref<?xi32>
253+
// CHECK-STORAGE: memref.dealloc %[[A2]] : memref<?xi64>
254+
// CHECK-STORAGE: memref.dealloc %[[A3]] : memref<?xf64>
255+
// CHECK-STORAGE: return
156256
func.func @sparse_dealloc_csr(%arg0: tensor<?x?xf64, #CSR>) {
157257
bufferization.dealloc_tensor %arg0 : tensor<?x?xf64, #CSR>
158258
return

0 commit comments

Comments
 (0)