brintos

brintos / llvm-project-archived public Read only

0
0
Text · 21.4 KiB · b669703 Raw
362 lines · plain
1//--------------------------------------------------------------------------------------------------2// WHEN CREATING A NEW TEST, PLEASE JUST COPY & PASTE WITHOUT EDITS.3//4// Set-up that's shared across all tests in this directory. In principle, this5// config could be moved to lit.local.cfg. However, there are downstream users that6//  do not use these LIT config files. Hence why this is kept inline.7//8// DEFINE: %{sparsifier_opts} = enable-runtime-library=true9// DEFINE: %{sparsifier_opts_sve} = enable-arm-sve=true %{sparsifier_opts}10// DEFINE: %{compile} = mlir-opt %s --sparsifier="%{sparsifier_opts}"11// DEFINE: %{compile_sve} = mlir-opt %s --sparsifier="%{sparsifier_opts_sve}"12// DEFINE: %{run_libs} = -shared-libs=%mlir_c_runner_utils,%mlir_runner_utils13// DEFINE: %{run_libs_sve} = -shared-libs=%native_mlir_runner_utils,%native_mlir_c_runner_utils14// DEFINE: %{run_opts} = -e main -entry-point-result=void15// DEFINE: %{run} = mlir-runner %{run_opts} %{run_libs}16// DEFINE: %{run_sve} = %mcr_aarch64_cmd --march=aarch64 --mattr="+sve" %{run_opts} %{run_libs_sve}17//18// DEFINE: %{env} =19//--------------------------------------------------------------------------------------------------20 21// RUN: %{compile} | %{run} | FileCheck %s22//23// Do the same run, but now with direct IR generation.24// REDEFINE: %{sparsifier_opts} = enable-runtime-library=false enable-buffer-initialization=true25// RUN: %{compile} | %{run} | FileCheck %s26//27// Do the same run, but now with direct IR generation and vectorization.28// REDEFINE: %{sparsifier_opts} = enable-runtime-library=false enable-buffer-initialization=true vl=2 reassociate-fp-reductions=true enable-index-optimizations=true29// RUN: %{compile} | %{run} | FileCheck %s30//31// Do the same run, but now with direct IR generation and VLA vectorization.32// RUN: %if mlir_arm_sve_tests %{ %{compile_sve} | %{run_sve} | FileCheck %s %}33 34#CCC = #sparse_tensor.encoding<{35  map = (d0, d1, d2) -> (d0 : compressed, d1 : compressed, d2 : compressed)36}>37 38#CDC = #sparse_tensor.encoding<{39  map = (d0, d1, d2) -> (d0 : compressed, d1 : dense, d2 : compressed)40}>41 42#DCC = #sparse_tensor.encoding<{43  map = (d0, d1, d2) -> (d0 : dense, d1 : compressed, d2 : compressed)44}>45 46#DDC = #sparse_tensor.encoding<{47  map = (d0, d1, d2) -> (d0 : dense, d1 : dense, d2 : compressed)48}>49 50// Creates and returns 3-D buffer of size (%s1, %s2, %s3) filled with the value %f51func.func @alloc_3d_filled_f32(%s1 : index, %s2 : index, %s3 : index, %f : f32) -> tensor<?x?x?xf32> {52  %buf = tensor.empty(%s1, %s2, %s3) : tensor<?x?x?xf32>53  %ret = linalg.fill ins(%f : f32) outs(%buf : tensor<?x?x?xf32>) -> tensor<?x?x?xf32>54  return %ret : tensor<?x?x?xf32>55}56 57func.func @conv_3d(%arg0: tensor<?x?x?xf32>, %arg1: tensor<?x?x?xf32>, %arg2: tensor<?x?x?xf32>) -> tensor<?x?x?xf32> {58  %ret = linalg.conv_3d59     ins (%arg0, %arg1: tensor<?x?x?xf32>, tensor<?x?x?xf32>)60    outs (%arg2: tensor<?x?x?xf32>) -> tensor<?x?x?xf32>61  return %ret : tensor<?x?x?xf32>62}63 64func.func @conv_3d_CCC(%arg0: tensor<?x?x?xf32, #CCC>, %arg1: tensor<?x?x?xf32>) -> tensor<?x?x?xf32, #CCC> {65  %c6 = arith.constant 6 : index66  %s = tensor.empty(%c6, %c6, %c6) : tensor<?x?x?xf32, #CCC>67  %ret = linalg.conv_3d68     ins (%arg0, %arg1: tensor<?x?x?xf32, #CCC>, tensor<?x?x?xf32>)69    outs (%s: tensor<?x?x?xf32, #CCC>) -> tensor<?x?x?xf32, #CCC>70  return %ret : tensor<?x?x?xf32, #CCC>71}72 73func.func @conv_3d_CDC(%arg0: tensor<?x?x?xf32, #CDC>, %arg1: tensor<?x?x?xf32>) -> tensor<?x?x?xf32, #CDC> {74  %c6 = arith.constant 6 : index75  %s = tensor.empty(%c6, %c6, %c6) : tensor<?x?x?xf32, #CDC>76  %ret = linalg.conv_3d77     ins (%arg0, %arg1: tensor<?x?x?xf32, #CDC>, tensor<?x?x?xf32>)78    outs (%s: tensor<?x?x?xf32, #CDC>) -> tensor<?x?x?xf32, #CDC>79  return %ret : tensor<?x?x?xf32, #CDC>80}81 82func.func @conv_3d_DCC(%arg0: tensor<?x?x?xf32, #DCC>, %arg1: tensor<?x?x?xf32>) -> tensor<?x?x?xf32, #DCC> {83  %c6 = arith.constant 6 : index84  %s = tensor.empty(%c6, %c6, %c6) : tensor<?x?x?xf32, #DCC>85  %ret = linalg.conv_3d86     ins (%arg0, %arg1: tensor<?x?x?xf32, #DCC>, tensor<?x?x?xf32>)87    outs (%s: tensor<?x?x?xf32, #DCC>) -> tensor<?x?x?xf32, #DCC>88  return %ret : tensor<?x?x?xf32, #DCC>89}90 91func.func @conv_3d_DDC(%arg0: tensor<?x?x?xf32, #DDC>, %arg1: tensor<?x?x?xf32>) -> tensor<?x?x?xf32, #DDC> {92  %c6 = arith.constant 6 : index93  %s = tensor.empty(%c6, %c6, %c6) : tensor<?x?x?xf32, #DDC>94  %ret = linalg.conv_3d95     ins (%arg0, %arg1: tensor<?x?x?xf32, #DDC>, tensor<?x?x?xf32>)96    outs (%s: tensor<?x?x?xf32, #DDC>) -> tensor<?x?x?xf32, #DDC>97  return %ret : tensor<?x?x?xf32, #DDC>98}99 100func.func @main() {101  %c0 = arith.constant 0 : index102  %c1 = arith.constant 1 : index103  %c3 = arith.constant 3 : index104  %c6 = arith.constant 6 : index105  %c8 = arith.constant 8 : index106  %f10 = arith.constant 10.00000e+00 : f32107  %val = arith.constant 2.00000e+00 : f32108  %zero = arith.constant 0.00000e+00 : f32109 110  %filter3D = call @alloc_3d_filled_f32(%c3, %c3, %c3, %val) : (index, index, index, f32) -> (tensor<?x?x?xf32>)111  %in3D_tmp = call @alloc_3d_filled_f32(%c8, %c8, %c8, %val) : (index, index, index, f32) -> (tensor<?x?x?xf32>)112  %in3D = tensor.insert %f10 into %in3D_tmp[%c0, %c3, %c0] : tensor<?x?x?xf32>113  %out3D = call @alloc_3d_filled_f32(%c6, %c6, %c6, %zero) : (index, index, index, f32) -> (tensor<?x?x?xf32>)114 115  %in3D_CCC = sparse_tensor.convert %in3D116    : tensor<?x?x?xf32> to tensor<?x?x?xf32, #CCC>117  %in3D_CDC = sparse_tensor.convert %in3D118    : tensor<?x?x?xf32> to tensor<?x?x?xf32, #CDC>119  %in3D_DCC = sparse_tensor.convert %in3D120    : tensor<?x?x?xf32> to tensor<?x?x?xf32, #DCC>121  %in3D_DDC = sparse_tensor.convert %in3D122    : tensor<?x?x?xf32> to tensor<?x?x?xf32, #DDC>123 124  %dense_ret = call @conv_3d(%in3D, %filter3D, %out3D) : (tensor<?x?x?xf32>, tensor<?x?x?xf32>, tensor<?x?x?xf32>) -> (tensor<?x?x?xf32>)125  %CCC_ret = call @conv_3d_CCC(%in3D_CCC, %filter3D) : (tensor<?x?x?xf32, #CCC>, tensor<?x?x?xf32>) -> (tensor<?x?x?xf32, #CCC>)126  %CDC_ret = call @conv_3d_CDC(%in3D_CDC, %filter3D) : (tensor<?x?x?xf32, #CDC>, tensor<?x?x?xf32>) -> (tensor<?x?x?xf32, #CDC>)127  %DCC_ret = call @conv_3d_DCC(%in3D_DCC, %filter3D) : (tensor<?x?x?xf32, #DCC>, tensor<?x?x?xf32>) -> (tensor<?x?x?xf32, #DCC>)128  %DDC_ret = call @conv_3d_DDC(%in3D_DDC, %filter3D) : (tensor<?x?x?xf32, #DDC>, tensor<?x?x?xf32>) -> (tensor<?x?x?xf32, #DDC>)129 130  //      CHECK:( ( ( 108, 108, 108, 108, 108, 108 ),131  // CHECK-SAME:    ( 124, 108, 108, 108, 108, 108 ),132  // CHECK-SAME:    ( 124, 108, 108, 108, 108, 108 ),133  // CHECK-SAME:    ( 124, 108, 108, 108, 108, 108 ),134  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),135  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ) ),136  // CHECK-SAME:  ( ( 108, 108, 108, 108, 108, 108 ),137  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),138  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),139  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),140  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),141  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ) ),142  // CHECK-SAME:  ( ( 108, 108, 108, 108, 108, 108 ),143  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),144  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),145  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),146  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),147  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ) ),148  // CHECK-SAME:  ( ( 108, 108, 108, 108, 108, 108 ),149  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),150  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),151  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),152  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),153  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ) ),154  // CHECK-SAME:  ( ( 108, 108, 108, 108, 108, 108 ),155  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),156  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),157  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),158  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),159  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ) ),160  // CHECK-SAME:  ( ( 108, 108, 108, 108, 108, 108 ),161  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),162  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),163  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),164  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ),165  // CHECK-SAME:    ( 108, 108, 108, 108, 108, 108 ) ) )166  %dense_v = vector.transfer_read %dense_ret[%c0, %c0, %c0], %zero167      : tensor<?x?x?xf32>, vector<6x6x6xf32>168  vector.print %dense_v : vector<6x6x6xf32>169 170  //171  // CHECK:      ---- Sparse Tensor ----172  // CHECK-NEXT: nse = 216173  // CHECK-NEXT: dim = ( 6, 6, 6 )174  // CHECK-NEXT: lvl = ( 6, 6, 6 )175  // CHECK-NEXT: pos[0] : ( 0, 6 )176  // CHECK-NEXT: crd[0] : ( 0, 1, 2, 3, 4, 5 )177  // CHECK-NEXT: pos[1] : ( 0, 6, 12, 18, 24, 30, 36 )178  // CHECK-NEXT: crd[1] : ( 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,179  // CHECK-SAME:            0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 )180  // CHECK-NEXT: pos[2] : ( 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78,181  // CHECK-SAME:            84, 90, 96, 102, 108, 114, 120, 126, 132, 138, 144, 150,182  // CHECK-SAME:            156, 162, 168, 174, 180, 186, 192, 198, 204, 210, 216 )183  // CHECK-NEXT: crd[2] : ( 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0,184  // CHECK-SAME:            1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1,185  // CHECK-SAME:            2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2,186  // CHECK-SAME:            3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,187  // CHECK-SAME:            4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4,188  // CHECK-SAME:            5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,189  // CHECK-SAME:            0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0,190  // CHECK-SAME:            1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1,191  // CHECK-SAME:            2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2,192  // CHECK-SAME:            3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,193  // CHECK-SAME:            4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4,194  // CHECK-SAME:            5, 0, 1, 2, 3, 4, 5 )195  // CHECK-NEXT: values : ( 108, 108, 108, 108, 108, 108, 124, 108, 108, 108, 108, 108,196  // CHECK-SAME:            124, 108, 108, 108, 108, 108, 124, 108, 108, 108, 108, 108,197  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,198  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,199  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,200  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,201  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,202  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,203  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,204  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,205  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,206  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,207  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,208  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,209  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,210  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,211  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,212  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108 )213  // CHECK-NEXT: ----214  //215  sparse_tensor.print %CCC_ret : tensor<?x?x?xf32, #CCC>216 217  //218  // CHECK:      ---- Sparse Tensor ----219  // CHECK-NEXT: nse = 216220  // CHECK-NEXT: dim = ( 6, 6, 6 )221  // CHECK-NEXT: lvl = ( 6, 6, 6 )222  // CHECK-NEXT: pos[0] : ( 0, 6 )223  // CHECK-NEXT: crd[0] : ( 0, 1, 2, 3, 4, 5 )224  // CHECK-NEXT: pos[2] : ( 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84,225  // CHECK-SAME:            90, 96, 102, 108, 114, 120, 126, 132, 138, 144, 150, 156,226  // CHECK-SAME:            162, 168, 174, 180, 186, 192, 198, 204, 210, 216 )227  // CHECK-NEXT: crd[2] : ( 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1,228  // CHECK-SAME:            2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,229  // CHECK-SAME:            4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,230  // CHECK-SAME:            0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1,231  // CHECK-SAME:            2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,232  // CHECK-SAME:            4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,233  // CHECK-SAME:            0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1,234  // CHECK-SAME:            2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,235  // CHECK-SAME:            4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,236  // CHECK-SAME:            0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1,237  // CHECK-SAME:            2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 )238  // CHECK-NEXT: values : ( 108, 108, 108, 108, 108, 108, 124, 108, 108, 108, 108, 108,239  // CHECK-SAME:            124, 108, 108, 108, 108, 108, 124, 108, 108, 108, 108, 108,240  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,241  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,242  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,243  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,244  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,245  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,246  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,247  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,248  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,249  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,250  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,251  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,252  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,253  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,254  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,255  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108 )256  // CHECK-NEXT: ----257  //258  sparse_tensor.print %CDC_ret : tensor<?x?x?xf32, #CDC>259 260  //261  // CHECK:      ---- Sparse Tensor ----262  // CHECK-NEXT: nse = 216263  // CHECK-NEXT: dim = ( 6, 6, 6 )264  // CHECK-NEXT: lvl = ( 6, 6, 6 )265  // CHECK-NEXT: pos[2] : ( 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90,266  // CHECK-SAME:            96, 102, 108, 114, 120, 126, 132, 138, 144, 150, 156, 162,267  // CHECK-SAME:            168, 174, 180, 186, 192, 198, 204, 210, 216 )268  // CHECK-NEXT: crd[2] : ( 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1,269  // CHECK-SAME:            2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,270  // CHECK-SAME:            4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,271  // CHECK-SAME:            0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1,272  // CHECK-SAME:            2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,273  // CHECK-SAME:            4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,274  // CHECK-SAME:            0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1,275  // CHECK-SAME:            2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,276  // CHECK-SAME:            4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,277  // CHECK-SAME:            0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1,278  // CHECK-SAME:            2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 )279  // CHECK-NEXT: values : ( 108, 108, 108, 108, 108, 108, 124, 108, 108, 108, 108, 108,280  // CHECK-SAME:            124, 108, 108, 108, 108, 108, 124, 108, 108, 108, 108, 108,281  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,282  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,283  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,284  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,285  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,286  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,287  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,288  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,289  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,290  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,291  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,292  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,293  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,294  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,295  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,296  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108 )297  // CHECK-NEXT: ----298  //299  sparse_tensor.print %DDC_ret : tensor<?x?x?xf32, #DDC>300 301  //302  // CHECK:      ---- Sparse Tensor ----303  // CHECK-NEXT: nse = 216304  // CHECK-NEXT: dim = ( 6, 6, 6 )305  // CHECK-NEXT: lvl = ( 6, 6, 6 )306  // CHECK-NEXT: pos[1] : ( 0, 6, 12, 18, 24, 30, 36 )307  // CHECK-NEXT: crd[1] : ( 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1,308  // CHECK-SAME:            2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 )309  // CHECK-NEXT: pos[2] : ( 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90,310  // CHECK-SAME:            96, 102, 108, 114, 120, 126, 132, 138, 144, 150, 156, 162,311  // CHECK-SAME:            168, 174, 180, 186, 192, 198, 204, 210, 216 )312  // CHECK-NEXT: crd[2] : ( 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1,313  // CHECK-SAME:            2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,314  // CHECK-SAME:            4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,315  // CHECK-SAME:            0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1,316  // CHECK-SAME:            2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,317  // CHECK-SAME:            4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,318  // CHECK-SAME:            0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1,319  // CHECK-SAME:            2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,320  // CHECK-SAME:            4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,321  // CHECK-SAME:            0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1,322  // CHECK-SAME:            2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 )323  // CHECK-NEXT: values : ( 108, 108, 108, 108, 108, 108, 124, 108, 108, 108, 108, 108,324  // CHECK-SAME:            124, 108, 108, 108, 108, 108, 124, 108, 108, 108, 108, 108,325  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,326  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,327  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,328  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,329  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,330  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,331  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,332  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,333  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,334  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,335  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,336  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,337  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,338  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,339  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,340  // CHECK-SAME:            108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108 )341  // CHECK-NEXT: ----342  //343  sparse_tensor.print %DCC_ret : tensor<?x?x?xf32, #DCC>344 345  // Free the resources346  bufferization.dealloc_tensor %in3D : tensor<?x?x?xf32>347  bufferization.dealloc_tensor %filter3D : tensor<?x?x?xf32>348  bufferization.dealloc_tensor %out3D : tensor<?x?x?xf32>349 350  bufferization.dealloc_tensor %in3D_CDC : tensor<?x?x?xf32, #CDC>351  bufferization.dealloc_tensor %in3D_CCC : tensor<?x?x?xf32, #CCC>352  bufferization.dealloc_tensor %in3D_DDC : tensor<?x?x?xf32, #DDC>353  bufferization.dealloc_tensor %in3D_DCC : tensor<?x?x?xf32, #DCC>354 355  bufferization.dealloc_tensor %CCC_ret : tensor<?x?x?xf32, #CCC>356  bufferization.dealloc_tensor %CDC_ret : tensor<?x?x?xf32, #CDC>357  bufferization.dealloc_tensor %DDC_ret : tensor<?x?x?xf32, #DDC>358  bufferization.dealloc_tensor %DCC_ret : tensor<?x?x?xf32, #DCC>359 360  return361}362