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 Silva std::unique_ptr<Pass> mlir::createSCFBufferizePass() {
41f0292edeSSean Silva   return std::make_unique<SCFBufferizePass>();
42f0292edeSSean Silva }
43