1f3bdb56dSRob Suderman //===- TestExpandMath.cpp - Test expand math op into exp form -------------===// 2f3bdb56dSRob Suderman // 3f3bdb56dSRob Suderman // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4f3bdb56dSRob Suderman // See https://llvm.org/LICENSE.txt for license information. 5f3bdb56dSRob Suderman // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6f3bdb56dSRob Suderman // 7f3bdb56dSRob Suderman //===----------------------------------------------------------------------===// 8f3bdb56dSRob Suderman // 9f3bdb56dSRob Suderman // This file contains test passes for expanding math operations. 10f3bdb56dSRob Suderman // 11f3bdb56dSRob Suderman //===----------------------------------------------------------------------===// 12f3bdb56dSRob Suderman 13f3bdb56dSRob Suderman #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" 14f3bdb56dSRob Suderman #include "mlir/Dialect/Math/Transforms/Passes.h" 15*8b68da2cSAlex Zinenko #include "mlir/Dialect/SCF/IR/SCF.h" 16f3bdb56dSRob Suderman #include "mlir/Pass/Pass.h" 17f3bdb56dSRob Suderman #include "mlir/Transforms/GreedyPatternRewriteDriver.h" 18f3bdb56dSRob Suderman 19f3bdb56dSRob Suderman using namespace mlir; 20f3bdb56dSRob Suderman 21f3bdb56dSRob Suderman namespace { 22f3bdb56dSRob Suderman struct TestExpandMathPass 23f3bdb56dSRob Suderman : public PassWrapper<TestExpandMathPass, OperationPass<>> { 24f3bdb56dSRob Suderman MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TestExpandMathPass) 25f3bdb56dSRob Suderman 26f3bdb56dSRob Suderman void runOnOperation() override; getArgument__anon0b8d03700111::TestExpandMathPass27f3bdb56dSRob Suderman StringRef getArgument() const final { return "test-expand-math"; } getDependentDialects__anon0b8d03700111::TestExpandMathPass28f3bdb56dSRob Suderman void getDependentDialects(DialectRegistry ®istry) const override { 29f3bdb56dSRob Suderman registry.insert<arith::ArithmeticDialect, scf::SCFDialect>(); 30f3bdb56dSRob Suderman } getDescription__anon0b8d03700111::TestExpandMathPass31f3bdb56dSRob Suderman StringRef getDescription() const final { return "Test expanding math"; } 32f3bdb56dSRob Suderman }; 33f3bdb56dSRob Suderman } // namespace 34f3bdb56dSRob Suderman runOnOperation()35f3bdb56dSRob Sudermanvoid TestExpandMathPass::runOnOperation() { 36f3bdb56dSRob Suderman RewritePatternSet patterns(&getContext()); 37f3bdb56dSRob Suderman populateExpandCtlzPattern(patterns); 38f3bdb56dSRob Suderman populateExpandTanhPattern(patterns); 39f3bdb56dSRob Suderman (void)applyPatternsAndFoldGreedily(getOperation(), std::move(patterns)); 40f3bdb56dSRob Suderman } 41f3bdb56dSRob Suderman 42f3bdb56dSRob Suderman namespace mlir { 43f3bdb56dSRob Suderman namespace test { registerTestExpandMathPass()44f3bdb56dSRob Sudermanvoid registerTestExpandMathPass() { PassRegistration<TestExpandMathPass>(); } 45f3bdb56dSRob Suderman } // namespace test 46f3bdb56dSRob Suderman } // namespace mlir 47