1 //===- Bufferize.cpp - Bufferization of linalg ops ------------------------===// 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 "PassDetail.h" 10 11 #include "mlir/Dialect/Bufferization/IR/Bufferization.h" 12 #include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" 13 #include "mlir/Dialect/Linalg/IR/Linalg.h" 14 #include "mlir/Dialect/Linalg/Passes.h" 15 #include "mlir/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.h" 16 #include "mlir/Dialect/Linalg/Transforms/Transforms.h" 17 #include "mlir/Dialect/Tensor/IR/Tensor.h" 18 #include "mlir/IR/BuiltinDialect.h" 19 #include "mlir/IR/Operation.h" 20 #include "mlir/Pass/Pass.h" 21 22 using namespace mlir; 23 using namespace bufferization; 24 25 namespace { 26 /// Converts Linalg operations that work on tensor-type operands or results to 27 /// work on buffers. 28 struct LinalgBufferizePass : public LinalgBufferizeBase<LinalgBufferizePass> { runOnOperation__anon74c001240111::LinalgBufferizePass29 void runOnOperation() override { 30 BufferizationOptions options = getPartialBufferizationOptions(); 31 options.opFilter.allowDialect<linalg::LinalgDialect>(); 32 33 if (failed(bufferizeOp(getOperation(), options))) 34 signalPassFailure(); 35 } 36 getDependentDialects__anon74c001240111::LinalgBufferizePass37 void getDependentDialects(DialectRegistry ®istry) const override { 38 registry.insert<bufferization::BufferizationDialect, memref::MemRefDialect, 39 tensor::TensorDialect, linalg::LinalgDialect>(); 40 linalg::registerBufferizableOpInterfaceExternalModels(registry); 41 } 42 }; 43 } // namespace 44 createLinalgBufferizePass()45std::unique_ptr<OperationPass<func::FuncOp>> mlir::createLinalgBufferizePass() { 46 return std::make_unique<LinalgBufferizePass>(); 47 } 48