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 &registry) 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 Suderman void 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 Suderman void registerTestExpandMathPass() { PassRegistration<TestExpandMathPass>(); }
45f3bdb56dSRob Suderman } // namespace test
46f3bdb56dSRob Suderman } // namespace mlir
47