brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 4bb5938 Raw
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