diff --git a/mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_conv_2d_nchw_fchw.mlir b/mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_conv_2d_nchw_fchw.mlir --- a/mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_conv_2d_nchw_fchw.mlir +++ b/mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_conv_2d_nchw_fchw.mlir @@ -74,6 +74,14 @@ return %ret : tensor } +func.func @conv_2d_nchw_fchw_CCCC_CCCC(%arg0: tensor, %arg1: tensor, %arg2: tensor) -> tensor { + %ret = linalg.conv_2d_nchw_fchw {dilations = dense<1> : tensor<2xi64>, + strides = dense<1> : tensor<2xi64>} + ins (%arg0, %arg1: tensor, tensor) + outs (%arg2: tensor) -> tensor + return %ret : tensor +} + func.func @entry() { %c0 = arith.constant 0 : index %c1 = arith.constant 1 : index @@ -96,9 +104,13 @@ %in2D_nhwc_CCCC = sparse_tensor.convert %in2D_nhwc : tensor to tensor + %filter2D_nhwc_CCCC = sparse_tensor.convert %filter2D_nhwc + : tensor to tensor + %dense_ret = call @conv_2d_nchw_fchw(%in2D_nhwc, %filter2D_nhwc, %out2D_nhwc) : (tensor, tensor, tensor) -> (tensor) %CCCC_ret = call @conv_2d_nchw_fchw_CDCD(%in2D_nhwc_CCCD, %filter2D_nhwc, %out2D_nhwc_CCCD) : (tensor, tensor, tensor) -> (tensor) %CDCD_ret = call @conv_2d_nchw_fchw_CCCC(%in2D_nhwc_CCCC, %filter2D_nhwc, %out2D_nhwc_CCCC) : (tensor, tensor, tensor) -> (tensor) + %dual_CCCC_ret = call @conv_2d_nchw_fchw_CCCC_CCCC(%in2D_nhwc_CCCC, %filter2D_nhwc_CCCC, %out2D_nhwc) : (tensor, tensor, tensor) -> (tensor) // CHECK: ( ( ( ( 108, 124, 124, 124, 108, 108 ), @@ -167,6 +179,28 @@ : tensor, vector<3x1x6x6xf32> vector.print %v2 : vector<3x1x6x6xf32> + // CHECK: ( ( ( ( 108, 124, 124, 124, 108, 108 ), + // CHECK-SAME: ( 108, 108, 108, 108, 108, 108 ), + // CHECK-SAME: ( 108, 108, 108, 108, 108, 108 ), + // CHECK-SAME: ( 108, 108, 108, 108, 108, 108 ), + // CHECK-SAME: ( 108, 108, 108, 108, 108, 108 ), + // CHECK-SAME: ( 108, 108, 108, 108, 108, 108 ) ) ), + // CHECK-SAME: ( ( ( 108, 108, 108, 108, 108, 108 ), + // CHECK-SAME: ( 108, 108, 108, 108, 108, 108 ), + // CHECK-SAME: ( 108, 108, 108, 108, 108, 108 ), + // CHECK-SAME: ( 108, 108, 108, 108, 108, 108 ), + // CHECK-SAME: ( 108, 108, 108, 108, 108, 108 ), + // CHECK-SAME: ( 108, 108, 108, 108, 108, 108 ) ) ), + // CHECK-SAME: ( ( ( 108, 108, 108, 108, 108, 108 ), + // CHECK-SAME: ( 108, 108, 108, 108, 108, 108 ), + // CHECK-SAME: ( 108, 108, 108, 108, 108, 108 ), + // CHECK-SAME: ( 108, 108, 108, 108, 108, 108 ), + // CHECK-SAME: ( 108, 108, 108, 108, 108, 108 ), + // CHECK-SAME: ( 108, 108, 108, 108, 108, 108 ) ) ) ) + %v3 = vector.transfer_read %dual_CCCC_ret[%c0, %c0, %c0, %c0], %zero + : tensor, vector<3x1x6x6xf32> + vector.print %v3 : vector<3x1x6x6xf32> + // Free the resources bufferization.dealloc_tensor %in2D_nhwc : tensor bufferization.dealloc_tensor %filter2D_nhwc : tensor @@ -176,5 +210,6 @@ bufferization.dealloc_tensor %in2D_nhwc_CCCC : tensor bufferization.dealloc_tensor %in2D_nhwc_CCCD : tensor + bufferization.dealloc_tensor %filter2D_nhwc_CCCC : tensor return }