// RUN: mlir-opt %s -split-input-file | mlir-opt -split-input-file | FileCheck %s #SV = #sparse_tensor.encoding<{ map = (d0) -> (d0 : compressed) }> // CHECK: #[[$SV:.*]] = #sparse_tensor.encoding<{ map = (d0) -> (d0 : compressed) }> // CHECK-LABEL: func private @sparse_1d_tensor( // CHECK-SAME: tensor<32xf64, #[[$SV]]>) func.func private @sparse_1d_tensor(tensor<32xf64, #SV>) // ----- #CSR = #sparse_tensor.encoding<{ map = (d0, d1) -> (d0 : dense, d1 : compressed), posWidth = 64, crdWidth = 64 }> // CHECK: #[[$CSR:.*]] = #sparse_tensor.encoding<{ map = (d0, d1) -> (d0 : dense, d1 : compressed), posWidth = 64, crdWidth = 64 }> // CHECK-LABEL: func private @sparse_csr( // CHECK-SAME: tensor) func.func private @sparse_csr(tensor) // ----- #CSR_explicit = #sparse_tensor.encoding<{ map = {l0, l1} (d0 = l0, d1 = l1) -> (l0 = d0 : dense, l1 = d1 : compressed) }> // CHECK: #[[$CSR_EXPLICIT:.*]] = #sparse_tensor.encoding<{ map = (d0, d1) -> (d0 : dense, d1 : compressed) }> // CHECK-LABEL: func private @CSR_explicit( // CHECK-SAME: tensor func.func private @CSR_explicit(%arg0: tensor) { return } // ----- #CSC = #sparse_tensor.encoding<{ map = (d0, d1) -> (d1 : dense, d0 : compressed), posWidth = 0, crdWidth = 0 }> // CHECK-DAG: #[[$CSC:.*]] = #sparse_tensor.encoding<{ map = (d0, d1) -> (d1 : dense, d0 : compressed) }> // CHECK-LABEL: func private @sparse_csc( // CHECK-SAME: tensor) func.func private @sparse_csc(tensor) // ----- #DCSC = #sparse_tensor.encoding<{ map = (d0, d1) -> (d1 : compressed, d0 : compressed), posWidth = 0, crdWidth = 64 }> // CHECK-DAG: #[[$DCSC:.*]] = #sparse_tensor.encoding<{ map = (d0, d1) -> (d1 : compressed, d0 : compressed), crdWidth = 64 }> // CHECK-LABEL: func private @sparse_dcsc( // CHECK-SAME: tensor) func.func private @sparse_dcsc(tensor) // ----- #COO = #sparse_tensor.encoding<{ map = (d0, d1) -> (d0 : compressed(nonunique, nonordered), d1 : singleton(nonordered)) }> // CHECK-DAG: #[[$COO:.*]] = #sparse_tensor.encoding<{ map = (d0, d1) -> (d0 : compressed(nonunique, nonordered), d1 : singleton(nonordered)) }> // CHECK-LABEL: func private @sparse_coo( // CHECK-SAME: tensor) func.func private @sparse_coo(tensor) // ----- #BCOO = #sparse_tensor.encoding<{ map = (d0, d1, d2) -> (d0 : dense, d1 : loose_compressed(nonunique), d2 : singleton) }> // CHECK-DAG: #[[$BCOO:.*]] = #sparse_tensor.encoding<{ map = (d0, d1, d2) -> (d0 : dense, d1 : loose_compressed(nonunique), d2 : singleton) }> // CHECK-LABEL: func private @sparse_bcoo( // CHECK-SAME: tensor) func.func private @sparse_bcoo(tensor) // ----- #SortedCOO = #sparse_tensor.encoding<{ map = (d0, d1) -> (d0 : compressed(nonunique), d1 : singleton) }> // CHECK-DAG: #[[$SortedCOO:.*]] = #sparse_tensor.encoding<{ map = (d0, d1) -> (d0 : compressed(nonunique), d1 : singleton) }> // CHECK-LABEL: func private @sparse_sorted_coo( // CHECK-SAME: tensor<10x10xf64, #[[$SortedCOO]]>) func.func private @sparse_sorted_coo(tensor<10x10xf64, #SortedCOO>) // ----- #BSR = #sparse_tensor.encoding<{ map = ( i, j ) -> ( i floordiv 2 : dense, j floordiv 3 : compressed, i mod 2 : dense, j mod 3 : dense ) }> // CHECK-DAG: #[[$BSR:.*]] = #sparse_tensor.encoding<{ map = (d0, d1) -> (d0 floordiv 2 : dense, d1 floordiv 3 : compressed, d0 mod 2 : dense, d1 mod 3 : dense) }> // CHECK-LABEL: func private @sparse_bsr( // CHECK-SAME: tensor<10x60xf64, #[[$BSR]]> func.func private @sparse_bsr(tensor<10x60xf64, #BSR>) // ----- #ELL = #sparse_tensor.encoding<{ map = [s0](d0, d1) -> (d0 * (s0 * 4) : dense, d0 : dense, d1 : compressed) }> // CHECK-DAG: #[[$ELL:.*]] = #sparse_tensor.encoding<{ map = [s0](d0, d1) -> (d0 * (s0 * 4) : dense, d0 : dense, d1 : compressed) }> // CHECK-LABEL: func private @sparse_ell( // CHECK-SAME: tensor func.func private @sparse_ell(tensor) // ----- #CSR_SLICE = #sparse_tensor.encoding<{ map = (d0 : #sparse_tensor, d1 : #sparse_tensor) -> (d0 : dense, d1 : compressed) }> // CHECK-DAG: #[[$CSR_SLICE:.*]] = #sparse_tensor.encoding<{ map = (d0 : #sparse_tensor, d1 : #sparse_tensor) -> (d0 : dense, d1 : compressed) }> // CHECK-LABEL: func private @sparse_slice( // CHECK-SAME: tensor func.func private @sparse_slice(tensor) // ----- #CSR_SLICE = #sparse_tensor.encoding<{ map = (d0 : #sparse_tensor, d1 : #sparse_tensor) -> (d0 : dense, d1 : compressed) }> // CHECK-DAG: #[[$CSR_SLICE:.*]] = #sparse_tensor.encoding<{ map = (d0 : #sparse_tensor, d1 : #sparse_tensor) -> (d0 : dense, d1 : compressed) }> // CHECK-LABEL: func private @sparse_slice( // CHECK-SAME: tensor func.func private @sparse_slice(tensor) // ----- #BSR = #sparse_tensor.encoding<{ map = ( i, j ) -> ( i floordiv 2 : dense, j floordiv 3 : compressed, i mod 2 : dense, j mod 3 : dense ) }> // CHECK-DAG: #[[$BSR:.*]] = #sparse_tensor.encoding<{ map = (d0, d1) -> (d0 floordiv 2 : dense, d1 floordiv 3 : compressed, d0 mod 2 : dense, d1 mod 3 : dense) }> // CHECK-LABEL: func private @BSR( // CHECK-SAME: tensor func.func private @BSR(%arg0: tensor) { return } // ----- #BCSR = #sparse_tensor.encoding<{ map = ( i, j, k ) -> ( i floordiv 2 : dense, j floordiv 3 : dense, k floordiv 4 : compressed, i mod 2 : dense, j mod 3 : dense, k mod 4 : dense ) }> // CHECK-DAG: #[[$BCSR:.*]] = #sparse_tensor.encoding<{ map = (d0, d1, d2) -> (d0 floordiv 2 : dense, d1 floordiv 3 : dense, d2 floordiv 4 : compressed, d0 mod 2 : dense, d1 mod 3 : dense, d2 mod 4 : dense) }> // CHECK-LABEL: func private @BCSR( // CHECK-SAME: tensor func.func private @BCSR(%arg0: tensor) { return } // ----- #BSR_explicit = #sparse_tensor.encoding<{ map = {il, jl, ii, jj} ( i = il * 2 + ii, j = jl * 3 + jj ) -> ( il = i floordiv 2 : dense, jl = j floordiv 3 : compressed, ii = i mod 2 : dense, jj = j mod 3 : dense ) }> // CHECK-DAG: #[[$BSR_explicit:.*]] = #sparse_tensor.encoding<{ map = (d0, d1) -> (d0 floordiv 2 : dense, d1 floordiv 3 : compressed, d0 mod 2 : dense, d1 mod 3 : dense) }> // CHECK-LABEL: func private @BSR_explicit( // CHECK-SAME: tensor func.func private @BSR_explicit(%arg0: tensor) { return } // ----- #NV_24 = #sparse_tensor.encoding<{ map = ( i, j ) -> ( i : dense, j floordiv 4 : dense, j mod 4 : block2_4 ), crdWidth = 8 // we would even like just 2-bits }> // CHECK-DAG: #[[$NV_24:.*]] = #sparse_tensor.encoding<{ map = (d0, d1) -> (d0 : dense, d1 floordiv 4 : dense, d1 mod 4 : block2_4), crdWidth = 8 }> // CHECK-LABEL: func private @NV_24( // CHECK-SAME: tensor func.func private @NV_24(%arg0: tensor) { return } // ----- #NV_24 = #sparse_tensor.encoding<{ map = ( i, j, k ) -> ( i : dense, j : dense, k floordiv 4 : dense, k mod 4 : block2_4 ) }> // CHECK-DAG: #[[$NV_24:.*]] = #sparse_tensor.encoding<{ map = (d0, d1, d2) -> (d0 : dense, d1 : dense, d2 floordiv 4 : dense, d2 mod 4 : block2_4) }> // CHECK-LABEL: func private @NV_24( // CHECK-SAME: tensor func.func private @NV_24(%arg0: tensor) { return } // ----- #NV_24 = #sparse_tensor.encoding<{ map = ( i, j, k ) -> ( i : dense, k floordiv 4 : dense, j : dense, k mod 4 : block2_4 ) }> // CHECK-DAG: #[[$NV_24:.*]] = #sparse_tensor.encoding<{ map = (d0, d1, d2) -> (d0 : dense, d2 floordiv 4 : dense, d1 : dense, d2 mod 4 : block2_4) }> // CHECK-LABEL: func private @NV_24( // CHECK-SAME: tensor func.func private @NV_24(%arg0: tensor) { return }