| //===-- Passes.td - Transforms pass definition file --------*- tablegen -*-===// | 
 | // | 
 | // Part of the MPACT Project, under the Apache License v2.0 with LLVM Exceptions. | 
 | // See https://llvm.org/LICENSE.txt for license information. | 
 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 | // | 
 | // This file contains definitions for passes within the Transforms/ directory. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #ifndef MPACT_TRANSFORMS_PASSES | 
 | #define MPACT_TRANSFORMS_PASSES | 
 |  | 
 | include "mlir/Pass/PassBase.td" | 
 |  | 
 | def SparseEncodingPropagation : Pass<"sparse-encoding-propagation", "func::FuncOp"> { | 
 |   let summary = "Propagate sparse tensor encodings"; | 
 |   let description = [{ | 
 |     A pass that propagates sparse tensor encodings. | 
 |  | 
 |     Background: To avoid introducing repetitive operations, sparse tensors | 
 |     in MLIR try to reuse tensor operations whenever available. However, most | 
 |     tensor operations are canonicalized/transformed without the knowledge | 
 |     of sparsity. The pass tries to propagate missing sparse encodings. | 
 |  | 
 |     For example: | 
 |     ```mlir | 
 |     %s = tensor.extract_slice %input[0, 0,] [2, 1] [1, 1] | 
 |        : tensor<2x3xf32, #sparse> to tensor<2x1xf32, #sparse> | 
 |  | 
 |     // After rank reducing (by tensor dialect transformation) | 
 |     %t = tensor.extract_slice %input[0, 0,] [2, 1] [1, 1] | 
 |        : tensor<2x3xf32, #sparse> to tensor<2xf32> | 
 |     %s = tensor.expand_shape [[0, 1]] %t | 
 |        : tensor<2xf32> to tensor<2x1xf32, #sparse> | 
 |  | 
 |     // After sparsity propagation | 
 |     %t = tensor.extract_slice %input[0, 0,] [2, 1] [1, 1] | 
 |        : tensor<2x3xf32, #sparse> to tensor<2xf32, #sparse1> | 
 |     %s = tensor.expand_shape [[0, 1]] %t | 
 |        : tensor<2xf32, #sparse1> to tensor<2x1xf32, #sparse> | 
 |     ``` | 
 |   }]; | 
 |  | 
 |   let constructor = "mlir::mpact::createSparseEncodingPropagationPass()"; | 
 |   let dependentDialects = []; | 
 | } | 
 |  | 
 | #endif // MPACT_TRANSFORMS_PASSES |