1 //====----- Bufferize.cpp - Bufferization of shape ops  ---------*- C++-*--===//
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/Bufferization/Transforms/Bufferize.h"
10 #include "PassDetail.h"
11 #include "mlir/Dialect/Bufferization/IR/Bufferization.h"
12 #include "mlir/Dialect/MemRef/IR/MemRef.h"
13 #include "mlir/Dialect/Shape/Transforms/Passes.h"
14 #include "mlir/Pass/Pass.h"
15 
16 using namespace mlir;
17 
18 namespace {
19 struct ShapeBufferizePass : public ShapeBufferizeBase<ShapeBufferizePass> {
20   void runOnOperation() override {
21     MLIRContext &ctx = getContext();
22 
23     RewritePatternSet patterns(&ctx);
24     bufferization::BufferizeTypeConverter typeConverter;
25     ConversionTarget target(ctx);
26 
27     bufferization::populateBufferizeMaterializationLegality(target);
28     populateShapeStructuralTypeConversionsAndLegality(typeConverter, patterns,
29                                                       target);
30 
31     if (failed(applyPartialConversion(getOperation(), target,
32                                       std::move(patterns))))
33       signalPassFailure();
34   }
35 };
36 } // namespace
37 
38 std::unique_ptr<OperationPass<FuncOp>> mlir::createShapeBufferizePass() {
39   return std::make_unique<ShapeBufferizePass>();
40 }
41