64 lines · plain
1// RUN: mlir-opt %s --sparse-assembler | FileCheck %s --check-prefix=CHECK-HI2// RUN: mlir-opt %s --sparse-assembler \3// RUN: --inline | FileCheck %s --check-prefix=CHECK-INL4// RUN: mlir-opt %s --sparse-assembler \5// RUN: --linalg-generalize-named-ops \6// RUN: --linalg-fuse-elementwise-ops \7// RUN: --sparsification-and-bufferization | FileCheck %s --check-prefix=CHECK-MID8// RUN: mlir-opt %s --sparse-assembler \9// RUN: --sparsifier | FileCheck %s --check-prefix=CHECK-LOW10 11//12// An example of a module generated by torch-mlir with a sparse tensor from13// torch.sparse. The MLIR sparsifier should be able to provide the external14// API through a wrapper method (spiface and ciface). Various passes should15// compose without trouble.16//17 18// CHECK-HI-LABEL: func.func @main19// CHECK-HI: sparse_tensor.assemble20// CHECK-HI: call @_internal_main21// CHECK-HI: return22// CHECK-HI: func.func private @_internal_main23// CHECK-HI: linalg.matmul24// CHECK-HI: return25 26// CHECK-INL-LABEL: func.func @main27// CHECK-INL: sparse_tensor.assemble28// CHECK-INL: linalg.matmul29// CHECK-INL: return30// CHECK-INL-NOT: func.func private @_internal_main31 32// CHECK-MID-LABEL: func.func @main33// CHECK-MID: memref.load34// CHECK-MID: call @_internal_main35// CHECK-MID: return36// CHECK-MID: func.func private @_internal_main37// CHECK-MID: scf.for38// CHECK-MID: scf.for39// CHECK-MID: return40 41// CHECK-LOW-LABEL: llvm.func @main42// CHECK-LOW: llvm.call @_internal_main43// CHECK-LOW: llvm.return44// CHECK-LOW: llvm.func @_mlir_ciface_main45// CHECK-LOW: llvm.call @main46// CHECK-LOW: llvm.return47// CHECK-LOW: llvm.func @_internal_main48// CHECK-SAME: {sym_visibility = "private"}49// CHECK-LOW: llvm.return50 51#csc = #sparse_tensor.encoding<{ map = (d0, d1) -> (d0 : dense, d1 : compressed) }>52module {53 func.func @main(%arg0: tensor<64x64xf32, #csc>,54 %arg1: tensor<64x64xf32>) -> tensor<64x64xf32> attributes {llvm.emit_c_interface} {55 %cst = arith.constant 0.000000e+00 : f3256 %0 = tensor.empty() : tensor<64x64xf32>57 %1 = linalg.fill ins(%cst : f32) outs(%0 : tensor<64x64xf32>) -> tensor<64x64xf32>58 %2 = linalg.matmul59 ins(%arg0, %arg1 : tensor<64x64xf32, #csc>, tensor<64x64xf32>)60 outs(%1 : tensor<64x64xf32>) -> tensor<64x64xf32>61 return %2 : tensor<64x64xf32>62 }63}64