116cbe883SMatthias Springer //===- Bufferize.cpp - Bufferization of linalg ops ------------------------===// 29ca97cdeSSean Silva // 39ca97cdeSSean Silva // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 49ca97cdeSSean Silva // See https://llvm.org/LICENSE.txt for license information. 59ca97cdeSSean Silva // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 69ca97cdeSSean Silva // 79ca97cdeSSean Silva //===----------------------------------------------------------------------===// 89ca97cdeSSean Silva 99ca97cdeSSean Silva #include "PassDetail.h" 10f89bb3c0SAlexander Belyaev 1157470abcSAlexander Belyaev #include "mlir/Dialect/Bufferization/IR/Bufferization.h" 12f89bb3c0SAlexander Belyaev #include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" 13b7f2c108Sgysit #include "mlir/Dialect/Linalg/IR/Linalg.h" 149ca97cdeSSean Silva #include "mlir/Dialect/Linalg/Passes.h" 1516cbe883SMatthias Springer #include "mlir/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.h" 169ca97cdeSSean Silva #include "mlir/Dialect/Linalg/Transforms/Transforms.h" 17060208b4SMatthias Springer #include "mlir/Dialect/Tensor/IR/Tensor.h" 1801c44185SNicolas Vasilache #include "mlir/IR/BuiltinDialect.h" 199ca97cdeSSean Silva #include "mlir/IR/Operation.h" 209ca97cdeSSean Silva #include "mlir/Pass/Pass.h" 219ca97cdeSSean Silva 2216cbe883SMatthias Springer using namespace mlir; 2316cbe883SMatthias Springer using namespace bufferization; 249ca97cdeSSean Silva 259ca97cdeSSean Silva namespace { 269ca97cdeSSean Silva /// Converts Linalg operations that work on tensor-type operands or results to 279ca97cdeSSean Silva /// work on buffers. 289ca97cdeSSean Silva struct LinalgBufferizePass : public LinalgBufferizeBase<LinalgBufferizePass> { runOnOperation__anon74c001240111::LinalgBufferizePass299ca97cdeSSean Silva void runOnOperation() override { 3016cbe883SMatthias Springer BufferizationOptions options = getPartialBufferizationOptions(); 31*1534177fSMatthias Springer options.opFilter.allowDialect<linalg::LinalgDialect>(); 329ca97cdeSSean Silva 3316cbe883SMatthias Springer if (failed(bufferizeOp(getOperation(), options))) 34eb8d386dSSean Silva signalPassFailure(); 359ca97cdeSSean Silva } 3616cbe883SMatthias Springer getDependentDialects__anon74c001240111::LinalgBufferizePass3716cbe883SMatthias Springer void getDependentDialects(DialectRegistry ®istry) const override { 3816cbe883SMatthias Springer registry.insert<bufferization::BufferizationDialect, memref::MemRefDialect, 3916cbe883SMatthias Springer tensor::TensorDialect, linalg::LinalgDialect>(); 4016cbe883SMatthias Springer linalg::registerBufferizableOpInterfaceExternalModels(registry); 4116cbe883SMatthias Springer } 429ca97cdeSSean Silva }; 43be0a7e9fSMehdi Amini } // namespace 449ca97cdeSSean Silva createLinalgBufferizePass()4558ceae95SRiver Riddlestd::unique_ptr<OperationPass<func::FuncOp>> mlir::createLinalgBufferizePass() { 469ca97cdeSSean Silva return std::make_unique<LinalgBufferizePass>(); 479ca97cdeSSean Silva } 48