1 //===- SparseTensorPipelines.cpp - Pipelines for sparse tensor code -------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "mlir/Dialect/SparseTensor/Pipelines/Passes.h" 10 11 #include "mlir/Conversion/Passes.h" 12 #include "mlir/Dialect/Bufferization/Transforms/Passes.h" 13 #include "mlir/Dialect/Linalg/Passes.h" 14 #include "mlir/Dialect/SparseTensor/IR/SparseTensor.h" 15 #include "mlir/Dialect/SparseTensor/Transforms/Passes.h" 16 #include "mlir/Dialect/StandardOps/Transforms/Passes.h" 17 #include "mlir/Dialect/Tensor/Transforms/Passes.h" 18 #include "mlir/Pass/PassManager.h" 19 20 using namespace mlir; 21 using namespace mlir::sparse_tensor; 22 23 //===----------------------------------------------------------------------===// 24 // Pipeline implementation. 25 //===----------------------------------------------------------------------===// 26 27 void mlir::sparse_tensor::buildSparseCompiler( 28 OpPassManager &pm, const SparseCompilerOptions &options) { 29 pm.addPass(createSparsificationPass(options.sparsificationOptions())); 30 pm.addPass(createSparseTensorConversionPass()); 31 pm.addPass(createLinalgBufferizePass()); 32 pm.addPass(createConvertLinalgToLoopsPass()); 33 pm.addPass(createConvertVectorToSCFPass()); 34 pm.addPass(createLowerToCFGPass()); // --convert-scf-to-std 35 pm.addPass(createFuncBufferizePass()); 36 pm.addPass(createTensorConstantBufferizePass()); 37 pm.addPass(createTensorBufferizePass()); 38 pm.addPass(createStdBufferizePass()); 39 pm.addPass(mlir::bufferization::createFinalizingBufferizePass()); 40 pm.addPass(createLowerAffinePass()); 41 pm.addPass(createConvertVectorToLLVMPass()); 42 pm.addPass(createMemRefToLLVMPass()); 43 pm.addPass(createConvertMathToLLVMPass()); 44 pm.addPass(createLowerToLLVMPass()); // --convert-std-to-llvm 45 pm.addPass(createReconcileUnrealizedCastsPass()); 46 } 47 48 //===----------------------------------------------------------------------===// 49 // Pipeline registration. 50 //===----------------------------------------------------------------------===// 51 52 void mlir::sparse_tensor::registerSparseTensorPipelines() { 53 PassPipelineRegistration<SparseCompilerOptions>( 54 "sparse-compiler", 55 "The standard pipeline for taking sparsity-agnostic IR using the" 56 " sparse-tensor type, and lowering it to LLVM IR with concrete" 57 " representations and algorithms for sparse tensors.", 58 buildSparseCompiler); 59 } 60