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 ®istry) 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