1 //===- Passes.h - Pass Entrypoints ------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef MLIR_DIALECT_MATH_TRANSFORMS_PASSES_H_ 10 #define MLIR_DIALECT_MATH_TRANSFORMS_PASSES_H_ 11 12 #include "mlir/Pass/Pass.h" 13 14 namespace mlir { 15 namespace math { 16 #define GEN_PASS_DECL 17 #define GEN_PASS_REGISTRATION 18 #include "mlir/Dialect/Math/Transforms/Passes.h.inc" 19 } // namespace math 20 21 class ConversionTarget; 22 class RewritePatternSet; 23 class TypeConverter; 24 25 void populateExpandCtlzPattern(RewritePatternSet &patterns); 26 void populateExpandTanPattern(RewritePatternSet &patterns); 27 void populateExpandSinhPattern(RewritePatternSet &patterns); 28 void populateExpandCoshPattern(RewritePatternSet &patterns); 29 void populateExpandTanhPattern(RewritePatternSet &patterns); 30 void populateExpandAsinhPattern(RewritePatternSet &patterns); 31 void populateExpandAcoshPattern(RewritePatternSet &patterns); 32 void populateExpandAtanhPattern(RewritePatternSet &patterns); 33 void populateExpandFmaFPattern(RewritePatternSet &patterns); 34 void populateExpandCeilFPattern(RewritePatternSet &patterns); 35 void populateExpandExp2FPattern(RewritePatternSet &patterns); 36 void populateExpandPowFPattern(RewritePatternSet &patterns); 37 void populateExpandFPowIPattern(RewritePatternSet &patterns); 38 void populateExpandRoundFPattern(RewritePatternSet &patterns); 39 void populateExpandRoundEvenPattern(RewritePatternSet &patterns); 40 void populateExpandRsqrtPattern(RewritePatternSet &patterns); 41 void populateMathAlgebraicSimplificationPatterns(RewritePatternSet &patterns); 42 43 struct MathPolynomialApproximationOptions { 44 // Enables the use of AVX2 intrinsics in some of the approximations. 45 bool enableAvx2 = false; 46 }; 47 48 void populatePolynomialApproximateTanhPattern(RewritePatternSet &patterns); 49 void populatePolynomialApproximateErfPattern(RewritePatternSet &patterns); 50 51 void populateMathPolynomialApproximationPatterns( 52 RewritePatternSet &patterns, 53 const MathPolynomialApproximationOptions &options = {}); 54 55 void populateUpliftToFMAPatterns(RewritePatternSet &patterns); 56 57 namespace math { 58 void populateExtendToSupportedTypesTypeConverter( 59 TypeConverter &typeConverter, const SetVector<Type> &sourceTypes, 60 Type targetType); 61 void populateExtendToSupportedTypesConversionTarget( 62 ConversionTarget &target, TypeConverter &typeConverter); 63 void populateExtendToSupportedTypesPatterns(RewritePatternSet &patterns, 64 const TypeConverter &typeConverter); 65 } // namespace math 66 } // namespace mlir 67 68 #endif // MLIR_DIALECT_MATH_TRANSFORMS_PASSES_H_ 69