1f0292edeSSean Silva //===- Bufferize.cpp - scf bufferize pass ---------------------------------===// 2f0292edeSSean Silva // 3f0292edeSSean Silva // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4f0292edeSSean Silva // See https://llvm.org/LICENSE.txt for license information. 5f0292edeSSean Silva // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6f0292edeSSean Silva // 7f0292edeSSean Silva //===----------------------------------------------------------------------===// 8f0292edeSSean Silva 9f89bb3c0SAlexander Belyaev #include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" 10f0292edeSSean Silva #include "PassDetail.h" 1157470abcSAlexander Belyaev #include "mlir/Dialect/Bufferization/IR/Bufferization.h" 1266f878ceSMatthias Springer #include "mlir/Dialect/MemRef/IR/MemRef.h" 13*8b68da2cSAlex Zinenko #include "mlir/Dialect/SCF/IR/SCF.h" 14*8b68da2cSAlex Zinenko #include "mlir/Dialect/SCF/Transforms/Passes.h" 15*8b68da2cSAlex Zinenko #include "mlir/Dialect/SCF/Transforms/Transforms.h" 16f0292edeSSean Silva #include "mlir/Transforms/DialectConversion.h" 17f0292edeSSean Silva 18f0292edeSSean Silva using namespace mlir; 19f0292edeSSean Silva using namespace mlir::scf; 20f0292edeSSean Silva 21f0292edeSSean Silva namespace { 22f0292edeSSean Silva struct SCFBufferizePass : public SCFBufferizeBase<SCFBufferizePass> { runOnOperation__anon955810890111::SCFBufferizePass2341574554SRiver Riddle void runOnOperation() override { 24f0292edeSSean Silva auto func = getOperation(); 25f0292edeSSean Silva auto *context = &getContext(); 26f0292edeSSean Silva 27f89bb3c0SAlexander Belyaev bufferization::BufferizeTypeConverter typeConverter; 28dc4e913bSChris Lattner RewritePatternSet patterns(context); 29f0292edeSSean Silva ConversionTarget target(*context); 30f0292edeSSean Silva 31f89bb3c0SAlexander Belyaev bufferization::populateBufferizeMaterializationLegality(target); 323a506b31SChris Lattner populateSCFStructuralTypeConversionsAndLegality(typeConverter, patterns, 333a506b31SChris Lattner target); 343fffffa8SRiver Riddle if (failed(applyPartialConversion(func, target, std::move(patterns)))) 35f0292edeSSean Silva return signalPassFailure(); 36f0292edeSSean Silva }; 37f0292edeSSean Silva }; 38be0a7e9fSMehdi Amini } // namespace 39f0292edeSSean Silva createSCFBufferizePass()40f0292edeSSean Silvastd::unique_ptr<Pass> mlir::createSCFBufferizePass() { 41f0292edeSSean Silva return std::make_unique<SCFBufferizePass>(); 42f0292edeSSean Silva } 43