[Mlir-commits] [mlir] 662ee93 - [mlir][sparse] extend codegen test cases with an additional step after storage expansion
Peiming Liu
llvmlistbot at llvm.org
Fri Sep 2 11:34:25 PDT 2022
Author: Peiming Liu
Date: 2022-09-02T18:34:15Z
New Revision: 662ee93cbbaad27e8dfecfdd4731dc4b168658b4
URL: https://github.com/llvm/llvm-project/commit/662ee93cbbaad27e8dfecfdd4731dc4b168658b4
DIFF: https://github.com/llvm/llvm-project/commit/662ee93cbbaad27e8dfecfdd4731dc4b168658b4.diff
LOG: [mlir][sparse] extend codegen test cases with an additional step after storage expansion
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D133219
Added:
Modified:
mlir/test/Dialect/SparseTensor/codegen.mlir
Removed:
################################################################################
diff --git a/mlir/test/Dialect/SparseTensor/codegen.mlir b/mlir/test/Dialect/SparseTensor/codegen.mlir
index 6d95be81a8c29..4da1d0bc31153 100644
--- a/mlir/test/Dialect/SparseTensor/codegen.mlir
+++ b/mlir/test/Dialect/SparseTensor/codegen.mlir
@@ -1,4 +1,6 @@
-// RUN: mlir-opt %s --sparse-tensor-codegen --canonicalize --cse | FileCheck %s
+// RUN: mlir-opt %s --sparse-tensor-codegen --canonicalize --cse | FileCheck %s --check-prefix=CHECK-CODEGEN
+// RUN: mlir-opt %s --sparse-tensor-codegen --sparse-tensor-storage-expansion --canonicalize --cse | FileCheck %s --check-prefix=CHECK-STORAGE
+
#SparseVector = #sparse_tensor.encoding<{
dimLevelType = [ "compressed" ],
@@ -35,49 +37,96 @@
dimOrdering = affine_map<(i, j, k) -> (k, i, j)>
}>
-// CHECK-LABEL: func @sparse_nop(
-// CHECK-SAME: %[[A:.*]]: tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
-// CHECK: return %[[A]] : tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>
+// CHECK-CODEGEN-LABEL: func @sparse_nop(
+// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
+// CHECK-CODEGEN: return %[[A]] : tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>
+//
+// CHECK-STORAGE-LABEL: func @sparse_nop(
+// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<1xindex>,
+// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
+// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
+// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xf64>)
+// CHECK-STORAGE: return %[[A0]], %[[A1]], %[[A2]], %[[A3]] : memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>
func.func @sparse_nop(%arg0: tensor<?xf64, #SparseVector>) -> tensor<?xf64, #SparseVector> {
return %arg0 : tensor<?xf64, #SparseVector>
}
-// CHECK-LABEL: func @sparse_nop_cast(
-// CHECK-SAME: %[[A:.*]]: tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf32>>)
-// CHECK: return %[[A]] : tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf32>>
+// CHECK-CODEGEN-LABEL: func @sparse_nop_cast(
+// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf32>>)
+// CHECK-CODEGEN: return %[[A]] : tuple<memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf32>>
+//
+// CHECK-STORAGE-LABEL: func @sparse_nop_cast(
+// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<1xindex>,
+// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
+// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
+// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xf32>)
+// CHECK-STORAGE: return %[[A0]], %[[A1]], %[[A2]], %[[A3]] : memref<1xindex>, memref<?xi32>, memref<?xi64>, memref<?xf32>
func.func @sparse_nop_cast(%arg0: tensor<64xf32, #SparseVector>) -> tensor<?xf32, #SparseVector> {
%0 = tensor.cast %arg0 : tensor<64xf32, #SparseVector> to tensor<?xf32, #SparseVector>
return %0 : tensor<?xf32, #SparseVector>
}
-// CHECK-LABEL: func @sparse_nop_cast_3d(
-// CHECK-SAME: %[[A:.*]]: tuple<memref<3xindex>, memref<?xf32>>)
-// CHECK: return %[[A]] : tuple<memref<3xindex>, memref<?xf32>>
+// CHECK-CODEGEN-LABEL: func @sparse_nop_cast_3d(
+// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<3xindex>, memref<?xf32>>)
+// CHECK-CODEGEN: return %[[A]] : tuple<memref<3xindex>, memref<?xf32>>
+//
+// CHECK-STORAGE-LABEL: func @sparse_nop_cast_3d(
+// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<3xindex>,
+// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xf32>)
+// CHECK-STORAGE: return %[[A0]], %[[A1]] : memref<3xindex>, memref<?xf32>
func.func @sparse_nop_cast_3d(%arg0: tensor<10x20x30xf32, #Dense3D>) -> tensor<?x?x?xf32, #Dense3D> {
%0 = tensor.cast %arg0 : tensor<10x20x30xf32, #Dense3D> to tensor<?x?x?xf32, #Dense3D>
return %0 : tensor<?x?x?xf32, #Dense3D>
}
-// CHECK-LABEL: func @sparse_dense_2d(
-// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xf64>>)
+// CHECK-CODEGEN-LABEL: func @sparse_dense_2d(
+// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xf64>>)
+//
+// CHECK-STORAGE-LABEL: func @sparse_dense_2d(
+// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
+// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xf64>) {
+// CHECK-STORAGE: return
func.func @sparse_dense_2d(%arg0: tensor<?x?xf64, #Dense2D>) {
return
}
-// CHECK-LABEL: func @sparse_row(
-// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
+// CHECK-CODEGEN-LABEL: func @sparse_row(
+// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
+//
+// CHECK-STORAGE-LABEL: func @sparse_row(
+// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
+// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
+// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
+// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xf64>) {
+// CHECK-STORAGE: return
func.func @sparse_row(%arg0: tensor<?x?xf64, #Row>) {
return
}
-// CHECK-LABEL: func @sparse_csr(
-// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
+// CHECK-CODEGEN-LABEL: func @sparse_csr(
+// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
+//
+// CHECK-STORAGE-LABEL: func @sparse_csr(
+// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
+// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
+// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
+// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xf64>) {
+// CHECK-STORAGE: return
func.func @sparse_csr(%arg0: tensor<?x?xf64, #CSR>) {
return
}
-// CHECK-LABEL: func @sparse_dcsr(
-// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
+// CHECK-CODEGEN-LABEL: func @sparse_dcsr(
+// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
+//
+// CHECK-STORAGE-LABEL: func @sparse_dcsr(
+// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
+// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
+// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
+// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xi32>,
+// CHECK-STORAGE-SAME: %[[A4:.*4]]: memref<?xi64>,
+// CHECK-STORAGE-SAME: %[[A5:.*5]]: memref<?xf64>) {
+// CHECK-STORAGE: return
func.func @sparse_dcsr(%arg0: tensor<?x?xf64, #DCSR>) {
return
}
@@ -86,10 +135,16 @@ func.func @sparse_dcsr(%arg0: tensor<?x?xf64, #DCSR>) {
// Querying for dimension 1 in the tensor type can immediately
// fold using the original static dimension sizes.
//
-// CHECK-LABEL: func @sparse_dense_3d(
-// CHECK-SAME: %[[A:.*]]: tuple<memref<3xindex>, memref<?xf64>>)
-// CHECK: %[[C:.*]] = arith.constant 20 : index
-// CHECK: return %[[C]] : index
+// CHECK-CODEGEN-LABEL: func @sparse_dense_3d(
+// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<3xindex>, memref<?xf64>>)
+// CHECK-CODEGEN: %[[C:.*]] = arith.constant 20 : index
+// CHECK-CODEGEN: return %[[C]] : index
+//
+// CHECK-STORAGE-LABEL: func @sparse_dense_3d(
+// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<3xindex>,
+// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xf64>)
+// CHECK-STORAGE: %[[C:.*]] = arith.constant 20 : index
+// CHECK-STORAGE: return %[[C]] : index
func.func @sparse_dense_3d(%arg0: tensor<10x20x30xf64, #Dense3D>) -> index {
%c = arith.constant 1 : index
%0 = tensor.dim %arg0, %c : tensor<10x20x30xf64, #Dense3D>
@@ -101,58 +156,103 @@ func.func @sparse_dense_3d(%arg0: tensor<10x20x30xf64, #Dense3D>) -> index {
// into querying for dimension 2 in the stored sparse tensor scheme,
// since the latter honors the dimOrdering.
//
-// CHECK-LABEL: func @sparse_dense_3d_dyn(
-// CHECK-SAME: %[[A:.*]]: tuple<memref<3xindex>, memref<?xf64>>)
-// CHECK: %[[C:.*]] = arith.constant 2 : index
-// CHECK: %[[F:.*]] = sparse_tensor.storage_get %[[A]][0] : tuple<memref<3xindex>, memref<?xf64>> to memref<3xindex>
-// CHECK: %[[L:.*]] = memref.load %[[F]][%[[C]]] : memref<3xindex>
-// CHECK: return %[[L]] : index
+// CHECK-CODEGEN-LABEL: func @sparse_dense_3d_dyn(
+// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<3xindex>, memref<?xf64>>)
+// CHECK-CODEGEN: %[[C:.*]] = arith.constant 2 : index
+// CHECK-CODEGEN: %[[F:.*]] = sparse_tensor.storage_get %[[A]][0] : tuple<memref<3xindex>, memref<?xf64>> to memref<3xindex>
+// CHECK-CODEGEN: %[[L:.*]] = memref.load %[[F]][%[[C]]] : memref<3xindex>
+// CHECK-CODEGEN: return %[[L]] : index
+//
+// CHECK-STORAGE-LABEL: func @sparse_dense_3d_dyn(
+// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<3xindex>,
+// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xf64>)
+// CHECK-STORAGE: %[[C:.*]] = arith.constant 2 : index
+// CHECK-STORAGE: %[[L:.*]] = memref.load %[[A0]][%[[C]]] : memref<3xindex>
+// CHECK-STORAGE: return %[[L]] : index
func.func @sparse_dense_3d_dyn(%arg0: tensor<?x?x?xf64, #Dense3D>) -> index {
%c = arith.constant 1 : index
%0 = tensor.dim %arg0, %c : tensor<?x?x?xf64, #Dense3D>
return %0 : index
}
-// CHECK-LABEL: func @sparse_pointers_dcsr(
-// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
-// CHECK: %[[F:.*]] = sparse_tensor.storage_get %[[A]][3] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xi32>
-// CHECK: return %[[F]] : memref<?xi32>
+// CHECK-CODEGEN-LABEL: func @sparse_pointers_dcsr(
+// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
+// 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>
+// CHECK-CODEGEN: return %[[F]] : memref<?xi32>
+//
+// CHECK-STORAGE-LABEL: func @sparse_pointers_dcsr(
+// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
+// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
+// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
+// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xi32>,
+// CHECK-STORAGE-SAME: %[[A4:.*4]]: memref<?xi64>,
+// CHECK-STORAGE-SAME: %[[A5:.*5]]: memref<?xf64>)
+// CHECK-STORAGE: return %[[A3]] : memref<?xi32>
func.func @sparse_pointers_dcsr(%arg0: tensor<?x?xf64, #DCSR>) -> memref<?xi32> {
%c = arith.constant 1 : index
%0 = sparse_tensor.pointers %arg0, %c : tensor<?x?xf64, #DCSR> to memref<?xi32>
return %0 : memref<?xi32>
}
-// CHECK-LABEL: func @sparse_indices_dcsr(
-// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
-// CHECK: %[[F:.*]] = sparse_tensor.storage_get %[[A]][4] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xi64>
-// CHECK: return %[[F]] : memref<?xi64>
+// CHECK-CODEGEN-LABEL: func @sparse_indices_dcsr(
+// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
+// 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>
+// CHECK-CODEGEN: return %[[F]] : memref<?xi64>
+//
+// CHECK-STORAGE-LABEL: func @sparse_indices_dcsr(
+// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
+// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
+// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
+// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xi32>,
+// CHECK-STORAGE-SAME: %[[A4:.*4]]: memref<?xi64>,
+// CHECK-STORAGE-SAME: %[[A5:.*5]]: memref<?xf64>)
+// CHECK-STORAGE: return %[[A4]] : memref<?xi64>
func.func @sparse_indices_dcsr(%arg0: tensor<?x?xf64, #DCSR>) -> memref<?xi64> {
%c = arith.constant 1 : index
%0 = sparse_tensor.indices %arg0, %c : tensor<?x?xf64, #DCSR> to memref<?xi64>
return %0 : memref<?xi64>
}
-// CHECK-LABEL: func @sparse_values_dcsr(
-// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
-// CHECK: %[[F:.*]] = sparse_tensor.storage_get %[[A]][5] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xf64>
-// CHECK: return %[[F]] : memref<?xf64>
+// CHECK-CODEGEN-LABEL: func @sparse_values_dcsr(
+// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
+// 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>
+// CHECK-CODEGEN: return %[[F]] : memref<?xf64>
+//
+// CHECK-STORAGE-LABEL: func @sparse_values_dcsr(
+// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
+// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
+// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
+// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xi32>,
+// CHECK-STORAGE-SAME: %[[A4:.*4]]: memref<?xi64>,
+// CHECK-STORAGE-SAME: %[[A5:.*5]]: memref<?xf64>)
+// CHECK-STORAGE: return %[[A5]] : memref<?xf64>
func.func @sparse_values_dcsr(%arg0: tensor<?x?xf64, #DCSR>) -> memref<?xf64> {
%0 = sparse_tensor.values %arg0 : tensor<?x?xf64, #DCSR> to memref<?xf64>
return %0 : memref<?xf64>
}
-// CHECK-LABEL: func @sparse_dealloc_csr(
-// CHECK-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
-// CHECK: %[[F0:.*]] = sparse_tensor.storage_get %[[A]][0] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<2xindex>
-// CHECK: memref.dealloc %[[F0]] : memref<2xindex>
-// CHECK: %[[F1:.*]] = sparse_tensor.storage_get %[[A]][1] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xi32>
-// CHECK: memref.dealloc %[[F1]] : memref<?xi32>
-// CHECK: %[[F2:.*]] = sparse_tensor.storage_get %[[A]][2] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xi64>
-// CHECK: memref.dealloc %[[F2]] : memref<?xi64>
-// CHECK: %[[F3:.*]] = sparse_tensor.storage_get %[[A]][3] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xf64>
-// CHECK: memref.dealloc %[[F3]] : memref<?xf64>
-// CHECK: return
+// CHECK-CODEGEN-LABEL: func @sparse_dealloc_csr(
+// CHECK-CODEGEN-SAME: %[[A:.*]]: tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>>)
+// CHECK-CODEGEN: %[[F0:.*]] = sparse_tensor.storage_get %[[A]][0] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<2xindex>
+// CHECK-CODEGEN: memref.dealloc %[[F0]] : memref<2xindex>
+// CHECK-CODEGEN: %[[F1:.*]] = sparse_tensor.storage_get %[[A]][1] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xi32>
+// CHECK-CODEGEN: memref.dealloc %[[F1]] : memref<?xi32>
+// CHECK-CODEGEN: %[[F2:.*]] = sparse_tensor.storage_get %[[A]][2] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xi64>
+// CHECK-CODEGEN: memref.dealloc %[[F2]] : memref<?xi64>
+// CHECK-CODEGEN: %[[F3:.*]] = sparse_tensor.storage_get %[[A]][3] : tuple<memref<2xindex>, memref<?xi32>, memref<?xi64>, memref<?xf64>> to memref<?xf64>
+// CHECK-CODEGEN: memref.dealloc %[[F3]] : memref<?xf64>
+// CHECK-CODEGEN: return
+//
+// CHECK-STORAGE-LABEL: func @sparse_dealloc_csr(
+// CHECK-STORAGE-SAME: %[[A0:.*0]]: memref<2xindex>,
+// CHECK-STORAGE-SAME: %[[A1:.*1]]: memref<?xi32>,
+// CHECK-STORAGE-SAME: %[[A2:.*2]]: memref<?xi64>,
+// CHECK-STORAGE-SAME: %[[A3:.*3]]: memref<?xf64>) {
+// CHECK-STORAGE: memref.dealloc %[[A0]] : memref<2xindex>
+// CHECK-STORAGE: memref.dealloc %[[A1]] : memref<?xi32>
+// CHECK-STORAGE: memref.dealloc %[[A2]] : memref<?xi64>
+// CHECK-STORAGE: memref.dealloc %[[A3]] : memref<?xf64>
+// CHECK-STORAGE: return
func.func @sparse_dealloc_csr(%arg0: tensor<?x?xf64, #CSR>) {
bufferization.dealloc_tensor %arg0 : tensor<?x?xf64, #CSR>
return
More information about the Mlir-commits
mailing list