1*9c0acc42SSlava Zakharin //===- AlgebraicSimplification.cpp - Simplify algebraic expressions -------===// 2*9c0acc42SSlava Zakharin // 3*9c0acc42SSlava Zakharin // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*9c0acc42SSlava Zakharin // See https://llvm.org/LICENSE.txt for license information. 5*9c0acc42SSlava Zakharin // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*9c0acc42SSlava Zakharin // 7*9c0acc42SSlava Zakharin //===----------------------------------------------------------------------===// 8*9c0acc42SSlava Zakharin // This file defines a pass that applies algebraic simplifications 9*9c0acc42SSlava Zakharin // to operations of Math/Complex/etc. dialects that are used by Flang. 10*9c0acc42SSlava Zakharin // It is done as a Flang specific pass, because we may want to tune 11*9c0acc42SSlava Zakharin // the parameters of the patterns for Fortran programs. 12*9c0acc42SSlava Zakharin //===----------------------------------------------------------------------===// 13*9c0acc42SSlava Zakharin 14*9c0acc42SSlava Zakharin #include "PassDetail.h" 15*9c0acc42SSlava Zakharin #include "flang/Optimizer/Transforms/Passes.h" 16*9c0acc42SSlava Zakharin #include "mlir/Dialect/Math/Transforms/Passes.h" 17*9c0acc42SSlava Zakharin #include "mlir/Transforms/GreedyPatternRewriteDriver.h" 18*9c0acc42SSlava Zakharin 19*9c0acc42SSlava Zakharin using namespace mlir; 20*9c0acc42SSlava Zakharin 21*9c0acc42SSlava Zakharin namespace { 22*9c0acc42SSlava Zakharin struct AlgebraicSimplification 23*9c0acc42SSlava Zakharin : public fir::AlgebraicSimplificationBase<AlgebraicSimplification> { 24*9c0acc42SSlava Zakharin 25*9c0acc42SSlava Zakharin void runOnOperation() override; 26*9c0acc42SSlava Zakharin }; 27*9c0acc42SSlava Zakharin } // namespace 28*9c0acc42SSlava Zakharin runOnOperation()29*9c0acc42SSlava Zakharinvoid AlgebraicSimplification::runOnOperation() { 30*9c0acc42SSlava Zakharin RewritePatternSet patterns(&getContext()); 31*9c0acc42SSlava Zakharin populateMathAlgebraicSimplificationPatterns(patterns); 32*9c0acc42SSlava Zakharin (void)applyPatternsAndFoldGreedily(getOperation(), std::move(patterns)); 33*9c0acc42SSlava Zakharin } 34*9c0acc42SSlava Zakharin createAlgebraicSimplificationPass()35*9c0acc42SSlava Zakharinstd::unique_ptr<mlir::Pass> fir::createAlgebraicSimplificationPass() { 36*9c0acc42SSlava Zakharin return std::make_unique<AlgebraicSimplification>(); 37*9c0acc42SSlava Zakharin } 38