xref: /llvm-project/mlir/test/lib/Dialect/Math/TestExpandMath.cpp (revision 45d83ae7df65a3c9843270d970119bc97957d830)
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 
13abc362a1SJakub Kuderski #include "mlir/Dialect/Arith/IR/Arith.h"
14f3bdb56dSRob Suderman #include "mlir/Dialect/Math/Transforms/Passes.h"
158b68da2cSAlex Zinenko #include "mlir/Dialect/SCF/IR/SCF.h"
16711c5893SRobert Suderman #include "mlir/Dialect/Vector/IR/VectorOps.h"
17f3bdb56dSRob Suderman #include "mlir/Pass/Pass.h"
18f3bdb56dSRob Suderman #include "mlir/Transforms/GreedyPatternRewriteDriver.h"
19f3bdb56dSRob Suderman 
20f3bdb56dSRob Suderman using namespace mlir;
21f3bdb56dSRob Suderman 
22f3bdb56dSRob Suderman namespace {
23f3bdb56dSRob Suderman struct TestExpandMathPass
24f3bdb56dSRob Suderman     : public PassWrapper<TestExpandMathPass, OperationPass<>> {
25f3bdb56dSRob Suderman   MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TestExpandMathPass)
26f3bdb56dSRob Suderman 
27f3bdb56dSRob Suderman   void runOnOperation() override;
28f3bdb56dSRob Suderman   StringRef getArgument() const final { return "test-expand-math"; }
29f3bdb56dSRob Suderman   void getDependentDialects(DialectRegistry &registry) const override {
30711c5893SRobert Suderman     registry
31711c5893SRobert Suderman         .insert<arith::ArithDialect, scf::SCFDialect, vector::VectorDialect>();
32f3bdb56dSRob Suderman   }
33f3bdb56dSRob Suderman   StringRef getDescription() const final { return "Test expanding math"; }
34f3bdb56dSRob Suderman };
35f3bdb56dSRob Suderman } // namespace
36f3bdb56dSRob Suderman 
37f3bdb56dSRob Suderman void TestExpandMathPass::runOnOperation() {
38f3bdb56dSRob Suderman   RewritePatternSet patterns(&getContext());
39f3bdb56dSRob Suderman   populateExpandCtlzPattern(patterns);
404da96515SBalaji V. Iyer   populateExpandExp2FPattern(patterns);
41740e2e90SRobert Suderman   populateExpandTanPattern(patterns);
42aa165edcSRob Suderman   populateExpandSinhPattern(patterns);
43aa165edcSRob Suderman   populateExpandCoshPattern(patterns);
44f3bdb56dSRob Suderman   populateExpandTanhPattern(patterns);
45a62a7024Sjinchen   populateExpandAsinhPattern(patterns);
46a62a7024Sjinchen   populateExpandAcoshPattern(patterns);
47a62a7024Sjinchen   populateExpandAtanhPattern(patterns);
48a7c2102dSBalaji V. Iyer   populateExpandFmaFPattern(patterns);
492217888dSBalaji V. Iyer   populateExpandCeilFPattern(patterns);
502d4e8567SBalaji V. Iyer   populateExpandPowFPattern(patterns);
5110a57f3aSPrashant Kumar   populateExpandFPowIPattern(patterns);
52be911578SBalaji V. Iyer   populateExpandRoundFPattern(patterns);
5344baa655SRamiro Leal-Cavazos   populateExpandRoundEvenPattern(patterns);
54279a659eSCorentin Ferry   populateExpandRsqrtPattern(patterns);
55*09dfc571SJacques Pienaar   (void)applyPatternsGreedily(getOperation(), std::move(patterns));
56f3bdb56dSRob Suderman }
57f3bdb56dSRob Suderman 
58f3bdb56dSRob Suderman namespace mlir {
59f3bdb56dSRob Suderman namespace test {
60f3bdb56dSRob Suderman void registerTestExpandMathPass() { PassRegistration<TestExpandMathPass>(); }
61f3bdb56dSRob Suderman } // namespace test
62f3bdb56dSRob Suderman } // namespace mlir
63