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