42 lines · cpp
1//===- SimplifyRegionLite.cpp -- region simplification lite ---------------===//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "flang/Optimizer/Dialect/FIROps.h"10#include "flang/Optimizer/Transforms/Passes.h"11#include "mlir/IR/PatternMatch.h"12#include "mlir/Pass/Pass.h"13#include "mlir/Transforms/DialectConversion.h"14#include "mlir/Transforms/GreedyPatternRewriteDriver.h"15#include "mlir/Transforms/RegionUtils.h"16 17namespace fir {18#define GEN_PASS_DEF_SIMPLIFYREGIONLITE19#include "flang/Optimizer/Transforms/Passes.h.inc"20} // namespace fir21 22namespace {23 24class SimplifyRegionLitePass25 : public fir::impl::SimplifyRegionLiteBase<SimplifyRegionLitePass> {26public:27 void runOnOperation() override;28};29} // namespace30 31void SimplifyRegionLitePass::runOnOperation() {32 auto op = getOperation();33 auto regions = op->getRegions();34 mlir::RewritePatternSet patterns(op.getContext());35 if (regions.empty())36 return;37 38 mlir::PatternRewriter rewriter(op.getContext());39 (void)mlir::eraseUnreachableBlocks(rewriter, regions);40 (void)mlir::runRegionDCE(rewriter, regions);41}42