1*9aeb7f03SValentin Clement //===- SimplifyRegionLite.cpp -- region simplification lite ---------------===// 2*9aeb7f03SValentin Clement // 3*9aeb7f03SValentin Clement // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*9aeb7f03SValentin Clement // See https://llvm.org/LICENSE.txt for license information. 5*9aeb7f03SValentin Clement // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*9aeb7f03SValentin Clement // 7*9aeb7f03SValentin Clement //===----------------------------------------------------------------------===// 8*9aeb7f03SValentin Clement 9*9aeb7f03SValentin Clement #include "PassDetail.h" 10*9aeb7f03SValentin Clement #include "flang/Optimizer/Dialect/FIROps.h" 11*9aeb7f03SValentin Clement #include "flang/Optimizer/Transforms/Passes.h" 12*9aeb7f03SValentin Clement #include "mlir/IR/PatternMatch.h" 13*9aeb7f03SValentin Clement #include "mlir/Pass/Pass.h" 14*9aeb7f03SValentin Clement #include "mlir/Transforms/DialectConversion.h" 15*9aeb7f03SValentin Clement #include "mlir/Transforms/GreedyPatternRewriteDriver.h" 16*9aeb7f03SValentin Clement #include "mlir/Transforms/RegionUtils.h" 17*9aeb7f03SValentin Clement 18*9aeb7f03SValentin Clement namespace { 19*9aeb7f03SValentin Clement 20*9aeb7f03SValentin Clement class SimplifyRegionLitePass 21*9aeb7f03SValentin Clement : public fir::SimplifyRegionLiteBase<SimplifyRegionLitePass> { 22*9aeb7f03SValentin Clement public: 23*9aeb7f03SValentin Clement void runOnOperation() override; 24*9aeb7f03SValentin Clement }; 25*9aeb7f03SValentin Clement 26*9aeb7f03SValentin Clement class DummyRewriter : public mlir::PatternRewriter { 27*9aeb7f03SValentin Clement public: DummyRewriter(mlir::MLIRContext * ctx)28*9aeb7f03SValentin Clement DummyRewriter(mlir::MLIRContext *ctx) : mlir::PatternRewriter(ctx) {} 29*9aeb7f03SValentin Clement }; 30*9aeb7f03SValentin Clement 31*9aeb7f03SValentin Clement } // namespace 32*9aeb7f03SValentin Clement runOnOperation()33*9aeb7f03SValentin Clementvoid SimplifyRegionLitePass::runOnOperation() { 34*9aeb7f03SValentin Clement auto op = getOperation(); 35*9aeb7f03SValentin Clement auto regions = op->getRegions(); 36*9aeb7f03SValentin Clement mlir::RewritePatternSet patterns(op.getContext()); 37*9aeb7f03SValentin Clement DummyRewriter rewriter(op.getContext()); 38*9aeb7f03SValentin Clement if (regions.empty()) 39*9aeb7f03SValentin Clement return; 40*9aeb7f03SValentin Clement 41*9aeb7f03SValentin Clement (void)mlir::eraseUnreachableBlocks(rewriter, regions); 42*9aeb7f03SValentin Clement (void)mlir::runRegionDCE(rewriter, regions); 43*9aeb7f03SValentin Clement } 44*9aeb7f03SValentin Clement createSimplifyRegionLitePass()45*9aeb7f03SValentin Clementstd::unique_ptr<mlir::Pass> fir::createSimplifyRegionLitePass() { 46*9aeb7f03SValentin Clement return std::make_unique<SimplifyRegionLitePass>(); 47*9aeb7f03SValentin Clement } 48