xref: /llvm-project/mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_print.mlir (revision eb206e9ea84eff0a0596fed2de8316d924f946d1)
1d37affb0SAart Bik//--------------------------------------------------------------------------------------------------
2d37affb0SAart Bik// WHEN CREATING A NEW TEST, PLEASE JUST COPY & PASTE WITHOUT EDITS.
3d37affb0SAart Bik//
4d37affb0SAart Bik// Set-up that's shared across all tests in this directory. In principle, this
5d37affb0SAart Bik// config could be moved to lit.local.cfg. However, there are downstream users that
6d37affb0SAart Bik//  do not use these LIT config files. Hence why this is kept inline.
7d37affb0SAart Bik//
8d37affb0SAart Bik// DEFINE: %{sparsifier_opts} = enable-runtime-library=true
9d37affb0SAart Bik// DEFINE: %{sparsifier_opts_sve} = enable-arm-sve=true %{sparsifier_opts}
10d37affb0SAart Bik// DEFINE: %{compile} = mlir-opt %s --sparsifier="%{sparsifier_opts}"
11d37affb0SAart Bik// DEFINE: %{compile_sve} = mlir-opt %s --sparsifier="%{sparsifier_opts_sve}"
12d37affb0SAart Bik// DEFINE: %{run_libs} = -shared-libs=%mlir_c_runner_utils,%mlir_runner_utils
13fe55c34dSZhaoshi Zheng// DEFINE: %{run_libs_sve} = -shared-libs=%native_mlir_runner_utils,%native_mlir_c_runner_utils
14d37affb0SAart Bik// DEFINE: %{run_opts} = -e main -entry-point-result=void
15*eb206e9eSAndrea Faulds// DEFINE: %{run} = mlir-runner %{run_opts} %{run_libs}
16fe55c34dSZhaoshi Zheng// DEFINE: %{run_sve} = %mcr_aarch64_cmd --march=aarch64 --mattr="+sve" %{run_opts} %{run_libs_sve}
17d37affb0SAart Bik//
18d37affb0SAart Bik// DEFINE: %{env} =
19d37affb0SAart Bik//--------------------------------------------------------------------------------------------------
20d37affb0SAart Bik
21d37affb0SAart Bik// RUN: %{compile} | %{run} | FileCheck %s
22d37affb0SAart Bik//
23d37affb0SAart Bik// Do the same run, but now with direct IR generation.
24d37affb0SAart Bik// REDEFINE: %{sparsifier_opts} = enable-runtime-library=false enable-buffer-initialization=true
25d37affb0SAart Bik// RUN: %{compile} | %{run} | FileCheck %s
26d37affb0SAart Bik//
27d37affb0SAart Bik
28d37affb0SAart Bik#AllDense = #sparse_tensor.encoding<{
29d37affb0SAart Bik  map = (i, j) -> (
30d37affb0SAart Bik    i : dense,
31d37affb0SAart Bik    j : dense
32d37affb0SAart Bik  )
33d37affb0SAart Bik}>
34d37affb0SAart Bik
35d37affb0SAart Bik#AllDenseT = #sparse_tensor.encoding<{
36d37affb0SAart Bik  map = (i, j) -> (
37d37affb0SAart Bik    j : dense,
38d37affb0SAart Bik    i : dense
39d37affb0SAart Bik  )
40d37affb0SAart Bik}>
41d37affb0SAart Bik
42d37affb0SAart Bik#CSR = #sparse_tensor.encoding<{
43d37affb0SAart Bik  map = (i, j) -> (
44d37affb0SAart Bik    i : dense,
45d37affb0SAart Bik    j : compressed
46d37affb0SAart Bik  )
47d37affb0SAart Bik}>
48d37affb0SAart Bik
49d37affb0SAart Bik#DCSR = #sparse_tensor.encoding<{
50d37affb0SAart Bik  map = (i, j) -> (
51d37affb0SAart Bik    i : compressed,
52d37affb0SAart Bik    j : compressed
53d37affb0SAart Bik  )
54d37affb0SAart Bik}>
55d37affb0SAart Bik
56d37affb0SAart Bik#CSC = #sparse_tensor.encoding<{
57d37affb0SAart Bik  map = (i, j) -> (
58d37affb0SAart Bik    j : dense,
59d37affb0SAart Bik    i : compressed
60d37affb0SAart Bik  )
61d37affb0SAart Bik}>
62d37affb0SAart Bik
63d37affb0SAart Bik#DCSC = #sparse_tensor.encoding<{
64d37affb0SAart Bik  map = (i, j) -> (
65d37affb0SAart Bik    j : compressed,
66d37affb0SAart Bik    i : compressed
67d37affb0SAart Bik  )
68d37affb0SAart Bik}>
69d37affb0SAart Bik
70d37affb0SAart Bik#BSR = #sparse_tensor.encoding<{
71d37affb0SAart Bik  map = (i, j) -> (
72d37affb0SAart Bik    i floordiv 2 : compressed,
73d37affb0SAart Bik    j floordiv 4 : compressed,
74d37affb0SAart Bik    i mod 2 : dense,
75d37affb0SAart Bik    j mod 4 : dense
76d37affb0SAart Bik  )
77d37affb0SAart Bik}>
78d37affb0SAart Bik
79d37affb0SAart Bik#BSRC = #sparse_tensor.encoding<{
80d37affb0SAart Bik  map = (i, j) -> (
81d37affb0SAart Bik    i floordiv 2 : compressed,
82d37affb0SAart Bik    j floordiv 4 : compressed,
83d37affb0SAart Bik    j mod 4 : dense,
84d37affb0SAart Bik    i mod 2 : dense
85d37affb0SAart Bik  )
86d37affb0SAart Bik}>
87d37affb0SAart Bik
88d37affb0SAart Bik#BSC = #sparse_tensor.encoding<{
89d37affb0SAart Bik  map = (i, j) -> (
90d37affb0SAart Bik    j floordiv 4 : compressed,
91d37affb0SAart Bik    i floordiv 2 : compressed,
92d37affb0SAart Bik    i mod 2 : dense,
93d37affb0SAart Bik    j mod 4 : dense
94d37affb0SAart Bik  )
95d37affb0SAart Bik}>
96d37affb0SAart Bik
97d37affb0SAart Bik#BSCC = #sparse_tensor.encoding<{
98d37affb0SAart Bik  map = (i, j) -> (
99d37affb0SAart Bik    j floordiv 4 : compressed,
100d37affb0SAart Bik    i floordiv 2 : compressed,
101d37affb0SAart Bik    j mod 4 : dense,
102d37affb0SAart Bik    i mod 2 : dense
103d37affb0SAart Bik  )
104d37affb0SAart Bik}>
105d37affb0SAart Bik
1068394ec9fSAart Bik#BSR0 = #sparse_tensor.encoding<{
1078394ec9fSAart Bik  map = (i, j) -> (
1088394ec9fSAart Bik    i floordiv 2 : dense,
1098394ec9fSAart Bik    j floordiv 4 : compressed,
1108394ec9fSAart Bik    i mod 2 : dense,
1118394ec9fSAart Bik    j mod 4 : dense
1128394ec9fSAart Bik  )
1138394ec9fSAart Bik}>
1148394ec9fSAart Bik
1158394ec9fSAart Bik#BSC0 = #sparse_tensor.encoding<{
1168394ec9fSAart Bik  map = (i, j) -> (
1178394ec9fSAart Bik    j floordiv 4 : dense,
1188394ec9fSAart Bik    i floordiv 2 : compressed,
1198394ec9fSAart Bik    i mod 2 : dense,
1208394ec9fSAart Bik    j mod 4 : dense
1218394ec9fSAart Bik  )
1228394ec9fSAart Bik}>
1238394ec9fSAart Bik
124dc4cfdbbSAart Bik#COOAoS = #sparse_tensor.encoding<{
125dc4cfdbbSAart Bik  map = (d0, d1) -> (d0 : compressed(nonunique), d1 : singleton)
126dc4cfdbbSAart Bik}>
127dc4cfdbbSAart Bik
128dc4cfdbbSAart Bik#COOSoA = #sparse_tensor.encoding<{
129dc4cfdbbSAart Bik  map = (d0, d1) -> (d0 : compressed(nonunique), d1 : singleton(soa))
130dc4cfdbbSAart Bik}>
131dc4cfdbbSAart Bik
132d37affb0SAart Bikmodule {
133d37affb0SAart Bik
134d37affb0SAart Bik  //
135d37affb0SAart Bik  // Main driver that tests sparse tensor storage.
136d37affb0SAart Bik  //
137d37affb0SAart Bik  func.func @main() {
138d37affb0SAart Bik    %x = arith.constant dense <[
139d37affb0SAart Bik         [ 1, 0, 2, 0, 0, 0, 0, 0 ],
140d37affb0SAart Bik         [ 0, 0, 0, 0, 0, 0, 0, 0 ],
141d37affb0SAart Bik         [ 0, 0, 0, 0, 0, 0, 0, 0 ],
142d37affb0SAart Bik         [ 0, 0, 3, 4, 0, 5, 0, 0 ] ]> : tensor<4x8xi32>
143d37affb0SAart Bik
1448394ec9fSAart Bik    %XO = sparse_tensor.convert %x : tensor<4x8xi32> to tensor<4x8xi32, #AllDense>
1458394ec9fSAart Bik    %XT = sparse_tensor.convert %x : tensor<4x8xi32> to tensor<4x8xi32, #AllDenseT>
1468394ec9fSAart Bik
1478394ec9fSAart Bik    // CHECK:      ---- Sparse Tensor ----
1488394ec9fSAart Bik    // CHECK-NEXT: nse = 32
149691fc7cdSAart Bik    // CHECK-NEXT: dim = ( 4, 8 )
150691fc7cdSAart Bik    // CHECK-NEXT: lvl = ( 4, 8 )
151eb177803SYinying Li    // CHECK-NEXT: values : ( 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 5, 0, 0 )
1528394ec9fSAart Bik    // CHECK-NEXT: ----
1538394ec9fSAart Bik    sparse_tensor.print %XO : tensor<4x8xi32, #AllDense>
1548394ec9fSAart Bik
1558394ec9fSAart Bik    // CHECK-NEXT: ---- Sparse Tensor ----
1568394ec9fSAart Bik    // CHECK-NEXT: nse = 32
157691fc7cdSAart Bik    // CHECK-NEXT: dim = ( 4, 8 )
158691fc7cdSAart Bik    // CHECK-NEXT: lvl = ( 8, 4 )
159eb177803SYinying Li    // CHECK-NEXT: values : ( 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 )
1608394ec9fSAart Bik    // CHECK-NEXT: ----
1618394ec9fSAart Bik    sparse_tensor.print %XT : tensor<4x8xi32, #AllDenseT>
1628394ec9fSAart Bik
163d37affb0SAart Bik    %a = sparse_tensor.convert %x : tensor<4x8xi32> to tensor<4x8xi32, #CSR>
164d37affb0SAart Bik    %b = sparse_tensor.convert %x : tensor<4x8xi32> to tensor<4x8xi32, #DCSR>
165d37affb0SAart Bik    %c = sparse_tensor.convert %x : tensor<4x8xi32> to tensor<4x8xi32, #CSC>
166d37affb0SAart Bik    %d = sparse_tensor.convert %x : tensor<4x8xi32> to tensor<4x8xi32, #DCSC>
167d37affb0SAart Bik    %e = sparse_tensor.convert %x : tensor<4x8xi32> to tensor<4x8xi32, #BSR>
168d37affb0SAart Bik    %f = sparse_tensor.convert %x : tensor<4x8xi32> to tensor<4x8xi32, #BSRC>
169d37affb0SAart Bik    %g = sparse_tensor.convert %x : tensor<4x8xi32> to tensor<4x8xi32, #BSC>
170d37affb0SAart Bik    %h = sparse_tensor.convert %x : tensor<4x8xi32> to tensor<4x8xi32, #BSCC>
1718394ec9fSAart Bik    %i = sparse_tensor.convert %x : tensor<4x8xi32> to tensor<4x8xi32, #BSR0>
1728394ec9fSAart Bik    %j = sparse_tensor.convert %x : tensor<4x8xi32> to tensor<4x8xi32, #BSC0>
173dc4cfdbbSAart Bik    %AoS = sparse_tensor.convert %x : tensor<4x8xi32> to tensor<4x8xi32, #COOAoS>
174dc4cfdbbSAart Bik    %SoA = sparse_tensor.convert %x : tensor<4x8xi32> to tensor<4x8xi32, #COOSoA>
175d37affb0SAart Bik
1768394ec9fSAart Bik    // CHECK-NEXT: ---- Sparse Tensor ----
177d37affb0SAart Bik    // CHECK-NEXT: nse = 5
178691fc7cdSAart Bik    // CHECK-NEXT: dim = ( 4, 8 )
179691fc7cdSAart Bik    // CHECK-NEXT: lvl = ( 4, 8 )
180eb177803SYinying Li    // CHECK-NEXT: pos[1] : ( 0, 2, 2, 2, 5 )
181eb177803SYinying Li    // CHECK-NEXT: crd[1] : ( 0, 2, 2, 3, 5 )
182eb177803SYinying Li    // CHECK-NEXT: values : ( 1, 2, 3, 4, 5 )
183d37affb0SAart Bik    // CHECK-NEXT: ----
184d37affb0SAart Bik    sparse_tensor.print %a : tensor<4x8xi32, #CSR>
185d37affb0SAart Bik
186d37affb0SAart Bik    // CHECK-NEXT: ---- Sparse Tensor ----
187d37affb0SAart Bik    // CHECK-NEXT: nse = 5
188691fc7cdSAart Bik    // CHECK-NEXT: dim = ( 4, 8 )
189691fc7cdSAart Bik    // CHECK-NEXT: lvl = ( 4, 8 )
190eb177803SYinying Li    // CHECK-NEXT: pos[0] : ( 0, 2 )
191eb177803SYinying Li    // CHECK-NEXT: crd[0] : ( 0, 3 )
192eb177803SYinying Li    // CHECK-NEXT: pos[1] : ( 0, 2, 5 )
193eb177803SYinying Li    // CHECK-NEXT: crd[1] : ( 0, 2, 2, 3, 5 )
194eb177803SYinying Li    // CHECK-NEXT: values : ( 1, 2, 3, 4, 5 )
195d37affb0SAart Bik    // CHECK-NEXT: ----
196d37affb0SAart Bik    sparse_tensor.print %b : tensor<4x8xi32, #DCSR>
197d37affb0SAart Bik
198d37affb0SAart Bik    // CHECK-NEXT: ---- Sparse Tensor ----
199d37affb0SAart Bik    // CHECK-NEXT: nse = 5
200691fc7cdSAart Bik    // CHECK-NEXT: dim = ( 4, 8 )
201691fc7cdSAart Bik    // CHECK-NEXT: lvl = ( 8, 4 )
202eb177803SYinying Li    // CHECK-NEXT: pos[1] : ( 0, 1, 1, 3, 4, 4, 5, 5, 5 )
203eb177803SYinying Li    // CHECK-NEXT: crd[1] : ( 0, 0, 3, 3, 3 )
204eb177803SYinying Li    // CHECK-NEXT: values : ( 1, 2, 3, 4, 5 )
205d37affb0SAart Bik    // CHECK-NEXT: ----
206d37affb0SAart Bik    sparse_tensor.print %c : tensor<4x8xi32, #CSC>
207d37affb0SAart Bik
208d37affb0SAart Bik    // CHECK-NEXT: ---- Sparse Tensor ----
209d37affb0SAart Bik    // CHECK-NEXT: nse = 5
210691fc7cdSAart Bik    // CHECK-NEXT: dim = ( 4, 8 )
211691fc7cdSAart Bik    // CHECK-NEXT: lvl = ( 8, 4 )
212eb177803SYinying Li    // CHECK-NEXT: pos[0] : ( 0, 4 )
213eb177803SYinying Li    // CHECK-NEXT: crd[0] : ( 0, 2, 3, 5 )
214eb177803SYinying Li    // CHECK-NEXT: pos[1] : ( 0, 1, 3, 4, 5 )
215eb177803SYinying Li    // CHECK-NEXT: crd[1] : ( 0, 0, 3, 3, 3 )
216eb177803SYinying Li    // CHECK-NEXT: values : ( 1, 2, 3, 4, 5 )
217d37affb0SAart Bik    // CHECK-NEXT: ----
218d37affb0SAart Bik    sparse_tensor.print %d : tensor<4x8xi32, #DCSC>
219d37affb0SAart Bik
220d37affb0SAart Bik    // CHECK-NEXT: ---- Sparse Tensor ----
221d37affb0SAart Bik    // CHECK-NEXT: nse = 24
222691fc7cdSAart Bik    // CHECK-NEXT: dim = ( 4, 8 )
223691fc7cdSAart Bik    // CHECK-NEXT: lvl = ( 2, 2, 2, 4 )
224eb177803SYinying Li    // CHECK-NEXT: pos[0] : ( 0, 2 )
225eb177803SYinying Li    // CHECK-NEXT: crd[0] : ( 0, 1 )
226eb177803SYinying Li    // CHECK-NEXT: pos[1] : ( 0, 1, 3 )
227eb177803SYinying Li    // CHECK-NEXT: crd[1] : ( 0, 0, 1 )
228eb177803SYinying Li    // CHECK-NEXT: values : ( 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 5, 0, 0 )
229d37affb0SAart Bik    // CHECK-NEXT: ----
230d37affb0SAart Bik    sparse_tensor.print %e : tensor<4x8xi32, #BSR>
231d37affb0SAart Bik
232d37affb0SAart Bik    // CHECK-NEXT: ---- Sparse Tensor ----
233d37affb0SAart Bik    // CHECK-NEXT: nse = 24
234691fc7cdSAart Bik    // CHECK-NEXT: dim = ( 4, 8 )
235691fc7cdSAart Bik    // CHECK-NEXT: lvl = ( 2, 2, 4, 2 )
236eb177803SYinying Li    // CHECK-NEXT: pos[0] : ( 0, 2 )
237eb177803SYinying Li    // CHECK-NEXT: crd[0] : ( 0, 1 )
238eb177803SYinying Li    // CHECK-NEXT: pos[1] : ( 0, 1, 3 )
239eb177803SYinying Li    // CHECK-NEXT: crd[1] : ( 0, 0, 1 )
240eb177803SYinying Li    // CHECK-NEXT: values : ( 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0 )
241d37affb0SAart Bik    // CHECK-NEXT: ----
242d37affb0SAart Bik    sparse_tensor.print %f : tensor<4x8xi32, #BSRC>
243d37affb0SAart Bik
244d37affb0SAart Bik    // CHECK-NEXT: ---- Sparse Tensor ----
245d37affb0SAart Bik    // CHECK-NEXT: nse = 24
246691fc7cdSAart Bik    // CHECK-NEXT: dim = ( 4, 8 )
247691fc7cdSAart Bik    // CHECK-NEXT: lvl = ( 2, 2, 2, 4 )
248eb177803SYinying Li    // CHECK-NEXT: pos[0] : ( 0, 2 )
249eb177803SYinying Li    // CHECK-NEXT: crd[0] : ( 0, 1 )
250eb177803SYinying Li    // CHECK-NEXT: pos[1] : ( 0, 2, 3 )
251eb177803SYinying Li    // CHECK-NEXT: crd[1] : ( 0, 1, 1 )
252eb177803SYinying Li    // CHECK-NEXT: values : ( 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 5, 0, 0 )
253d37affb0SAart Bik    // CHECK-NEXT: ----
254d37affb0SAart Bik    sparse_tensor.print %g : tensor<4x8xi32, #BSC>
255d37affb0SAart Bik
256d37affb0SAart Bik    // CHECK-NEXT: ---- Sparse Tensor ----
257d37affb0SAart Bik    // CHECK-NEXT: nse = 24
258691fc7cdSAart Bik    // CHECK-NEXT: dim = ( 4, 8 )
259691fc7cdSAart Bik    // CHECK-NEXT: lvl = ( 2, 2, 4, 2 )
260eb177803SYinying Li    // CHECK-NEXT: pos[0] : ( 0, 2 )
261eb177803SYinying Li    // CHECK-NEXT: crd[0] : ( 0, 1 )
262eb177803SYinying Li    // CHECK-NEXT: pos[1] : ( 0, 2, 3 )
263eb177803SYinying Li    // CHECK-NEXT: crd[1] : ( 0, 1, 1 )
264eb177803SYinying Li    // CHECK-NEXT: values : ( 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0 )
265d37affb0SAart Bik    // CHECK-NEXT: ----
266d37affb0SAart Bik    sparse_tensor.print %h : tensor<4x8xi32, #BSCC>
267d37affb0SAart Bik
2688394ec9fSAart Bik    // CHECK-NEXT: ---- Sparse Tensor ----
2698394ec9fSAart Bik    // CHECK-NEXT: nse = 24
270691fc7cdSAart Bik    // CHECK-NEXT: dim = ( 4, 8 )
271691fc7cdSAart Bik    // CHECK-NEXT: lvl = ( 2, 2, 2, 4 )
272eb177803SYinying Li    // CHECK-NEXT: pos[1] : ( 0, 1, 3 )
273eb177803SYinying Li    // CHECK-NEXT: crd[1] : ( 0, 0, 1 )
274eb177803SYinying Li    // CHECK-NEXT: values : ( 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 5, 0, 0 )
2758394ec9fSAart Bik    // CHECK-NEXT: ----
2768394ec9fSAart Bik    sparse_tensor.print %i : tensor<4x8xi32, #BSR0>
2778394ec9fSAart Bik
2788394ec9fSAart Bik    // CHECK-NEXT: ---- Sparse Tensor ----
2798394ec9fSAart Bik    // CHECK-NEXT: nse = 24
280691fc7cdSAart Bik    // CHECK-NEXT: dim = ( 4, 8 )
281691fc7cdSAart Bik    // CHECK-NEXT: lvl = ( 2, 2, 2, 4 )
282eb177803SYinying Li    // CHECK-NEXT: pos[1] : ( 0, 2, 3 )
283eb177803SYinying Li    // CHECK-NEXT: crd[1] : ( 0, 1, 1 )
284eb177803SYinying Li    // CHECK-NEXT: values : ( 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 5, 0, 0 )
2858394ec9fSAart Bik    // CHECK-NEXT: ----
2868394ec9fSAart Bik    sparse_tensor.print %j : tensor<4x8xi32, #BSC0>
2878394ec9fSAart Bik
288dc4cfdbbSAart Bik    // CHECK-NEXT: ---- Sparse Tensor ----
289dc4cfdbbSAart Bik    // CHECK-NEXT: nse = 5
290dc4cfdbbSAart Bik    // CHECK-NEXT: dim = ( 4, 8 )
291dc4cfdbbSAart Bik    // CHECK-NEXT: lvl = ( 4, 8 )
292eb177803SYinying Li    // CHECK-NEXT: pos[0] : ( 0, 5 )
293eb177803SYinying Li    // CHECK-NEXT: crd[0] : ( 0, 0, 0, 2, 3, 2, 3, 3, 3, 5 )
294eb177803SYinying Li    // CHECK-NEXT: values : ( 1, 2, 3, 4, 5 )
295dc4cfdbbSAart Bik    // CHECK-NEXT: ----
296dc4cfdbbSAart Bik    sparse_tensor.print %AoS : tensor<4x8xi32, #COOAoS>
297dc4cfdbbSAart Bik
298dc4cfdbbSAart Bik    // CHECK-NEXT: ---- Sparse Tensor ----
299dc4cfdbbSAart Bik    // CHECK-NEXT: nse = 5
300dc4cfdbbSAart Bik    // CHECK-NEXT: dim = ( 4, 8 )
301dc4cfdbbSAart Bik    // CHECK-NEXT: lvl = ( 4, 8 )
302eb177803SYinying Li    // CHECK-NEXT: pos[0] : ( 0, 5 )
303eb177803SYinying Li    // CHECK-NEXT: crd[0] : ( 0, 0, 3, 3, 3 )
304eb177803SYinying Li    // CHECK-NEXT: crd[1] : ( 0, 2, 2, 3, 5 )
305eb177803SYinying Li    // CHECK-NEXT: values : ( 1, 2, 3, 4, 5 )
306dc4cfdbbSAart Bik    // CHECK-NEXT: ----
307dc4cfdbbSAart Bik    sparse_tensor.print %SoA : tensor<4x8xi32, #COOSoA>
308dc4cfdbbSAart Bik
309d37affb0SAart Bik    // Release the resources.
3108394ec9fSAart Bik    bufferization.dealloc_tensor %XO  : tensor<4x8xi32, #AllDense>
3118394ec9fSAart Bik    bufferization.dealloc_tensor %XT  : tensor<4x8xi32, #AllDenseT>
312d37affb0SAart Bik    bufferization.dealloc_tensor %a   : tensor<4x8xi32, #CSR>
313d37affb0SAart Bik    bufferization.dealloc_tensor %b   : tensor<4x8xi32, #DCSR>
314d37affb0SAart Bik    bufferization.dealloc_tensor %c   : tensor<4x8xi32, #CSC>
315d37affb0SAart Bik    bufferization.dealloc_tensor %d   : tensor<4x8xi32, #DCSC>
316d37affb0SAart Bik    bufferization.dealloc_tensor %e   : tensor<4x8xi32, #BSR>
317d37affb0SAart Bik    bufferization.dealloc_tensor %f   : tensor<4x8xi32, #BSRC>
318d37affb0SAart Bik    bufferization.dealloc_tensor %g   : tensor<4x8xi32, #BSC>
319d37affb0SAart Bik    bufferization.dealloc_tensor %h   : tensor<4x8xi32, #BSCC>
3208394ec9fSAart Bik    bufferization.dealloc_tensor %i   : tensor<4x8xi32, #BSR0>
3218394ec9fSAart Bik    bufferization.dealloc_tensor %j   : tensor<4x8xi32, #BSC0>
322dc4cfdbbSAart Bik    bufferization.dealloc_tensor %AoS : tensor<4x8xi32, #COOAoS>
323dc4cfdbbSAart Bik    bufferization.dealloc_tensor %SoA : tensor<4x8xi32, #COOSoA>
324d37affb0SAart Bik
325d37affb0SAart Bik    return
326d37affb0SAart Bik  }
327d37affb0SAart Bik}
328