MLIR 22.0.0git
ExpandOps.cpp File Reference
#include "mlir/Dialect/Arith/IR/Arith.h"
#include "mlir/Dialect/Math/IR/Math.h"
#include "mlir/Dialect/Math/Transforms/Passes.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/Matchers.h"
#include "mlir/IR/TypeUtilities.h"
#include "mlir/Transforms/GreedyPatternRewriteDriver.h"
#include "mlir/Dialect/Math/Transforms/Passes.h.inc"

Go to the source code of this file.

Classes

class  mlir::math::impl::MathExpandOpsPassBase< DerivedT >

Namespaces

namespace  mlir
 Include the generated interface declarations.
namespace  mlir::math
namespace  mlir::math::impl

Macros

#define GEN_PASS_DEF_MATHEXPANDOPSPASS

Functions

std::unique_ptr<::mlir::Passmlir::math::impl::createMathExpandOpsPass ()
std::unique_ptr<::mlir::Passmlir::math::impl::createMathExpandOpsPass (MathExpandOpsPassOptions options)
std::unique_ptr<::mlir::Passmlir::math::createMathExpandOpsPass ()
std::unique_ptr<::mlir::Passmlir::math::createMathExpandOpsPass (MathExpandOpsPassOptions options)
static Value createFloatConst (Location loc, Type type, APFloat value, OpBuilder &b)
 Create a float constant.
static Value createFloatConst (Location loc, Type type, double value, OpBuilder &b)
static Value createIntConst (Location loc, Type type, int64_t value, OpBuilder &b)
 Create an integer constant.
static Value createTruncatedFPValue (Value operand, ImplicitLocOpBuilder &b)
static LogicalResult convertSinhOp (math::SinhOp op, PatternRewriter &rewriter)
static LogicalResult convertCoshOp (math::CoshOp op, PatternRewriter &rewriter)
static LogicalResult convertTanhOp (math::TanhOp op, PatternRewriter &rewriter)
 Expands tanh op into 1-exp^{-2x} / 1+exp^{-2x} To avoid overflow we exploit the reflection symmetry tanh(-x) = -tanh(x).
static LogicalResult convertTanOp (math::TanOp op, PatternRewriter &rewriter)
static LogicalResult convertAsinhOp (math::AsinhOp op, PatternRewriter &rewriter)
static LogicalResult convertAcoshOp (math::AcoshOp op, PatternRewriter &rewriter)
static LogicalResult convertAtanhOp (math::AtanhOp op, PatternRewriter &rewriter)
static LogicalResult convertFmaFOp (math::FmaOp op, PatternRewriter &rewriter)
static LogicalResult convertCeilOp (math::CeilOp op, PatternRewriter &rewriter)
static LogicalResult convertFPowIOp (math::FPowIOp op, PatternRewriter &rewriter)
static LogicalResult convertPowfOp (math::PowFOp op, PatternRewriter &rewriter)
static LogicalResult convertExp2fOp (math::Exp2Op op, PatternRewriter &rewriter)
static LogicalResult convertRoundOp (math::RoundOp op, PatternRewriter &rewriter)
static LogicalResult convertCtlzOp (math::CountLeadingZerosOp op, PatternRewriter &rewriter)
static LogicalResult convertRoundEvenOp (math::RoundEvenOp op, PatternRewriter &rewriter)
static LogicalResult convertRsqrtOp (math::RsqrtOp op, PatternRewriter &rewriter)
static LogicalResult convertClampfOp (math::ClampFOp op, PatternRewriter &rewriter)

Macro Definition Documentation

◆ GEN_PASS_DEF_MATHEXPANDOPSPASS

#define GEN_PASS_DEF_MATHEXPANDOPSPASS

Definition at line 24 of file ExpandOps.cpp.

Function Documentation

◆ convertAcoshOp()

LogicalResult convertAcoshOp ( math::AcoshOp op,
PatternRewriter & rewriter )
static

◆ convertAsinhOp()

LogicalResult convertAsinhOp ( math::AsinhOp op,
PatternRewriter & rewriter )
static

◆ convertAtanhOp()

LogicalResult convertAtanhOp ( math::AtanhOp op,
PatternRewriter & rewriter )
static

◆ convertCeilOp()

LogicalResult convertCeilOp ( math::CeilOp op,
PatternRewriter & rewriter )
static

◆ convertClampfOp()

LogicalResult convertClampfOp ( math::ClampFOp op,
PatternRewriter & rewriter )
static

◆ convertCoshOp()

LogicalResult convertCoshOp ( math::CoshOp op,
PatternRewriter & rewriter )
static

Definition at line 91 of file ExpandOps.cpp.

Referenced by mlir::math::populateExpansionPatterns().

◆ convertCtlzOp()

LogicalResult convertCtlzOp ( math::CountLeadingZerosOp op,
PatternRewriter & rewriter )
static

◆ convertExp2fOp()

LogicalResult convertExp2fOp ( math::Exp2Op op,
PatternRewriter & rewriter )
static

◆ convertFmaFOp()

LogicalResult convertFmaFOp ( math::FmaOp op,
PatternRewriter & rewriter )
static

Definition at line 209 of file ExpandOps.cpp.

References add, b, mlir::RewriterBase::replaceOp(), and success().

Referenced by mlir::math::populateExpansionPatterns().

◆ convertFPowIOp()

◆ convertPowfOp()

◆ convertRoundEvenOp()

◆ convertRoundOp()

◆ convertRsqrtOp()

LogicalResult convertRsqrtOp ( math::RsqrtOp op,
PatternRewriter & rewriter )
static

◆ convertSinhOp()

LogicalResult convertSinhOp ( math::SinhOp op,
PatternRewriter & rewriter )
static

Definition at line 75 of file ExpandOps.cpp.

References b, and mlir::Value::getType().

Referenced by mlir::math::populateExpansionPatterns().

◆ convertTanhOp()

LogicalResult convertTanhOp ( math::TanhOp op,
PatternRewriter & rewriter )
static

Expands tanh op into 1-exp^{-2x} / 1+exp^{-2x} To avoid overflow we exploit the reflection symmetry tanh(-x) = -tanh(x).

We compute a "signs" value which is -1 if input is negative and +1 if input is positive. Then multiply the input by this value, guaranteeing that the result is positive, which also guarantees exp^{-2x * sign(x)} is in (0, 1]. Expand the computation on the input x * sign(x), then multiply the result by sign(x) to retain sign of the real result.

Definition at line 114 of file ExpandOps.cpp.

References createFloatConst(), mlir::RewriterBase::replaceOpWithNewOp(), and success().

Referenced by mlir::math::populateExpansionPatterns().

◆ convertTanOp()

LogicalResult convertTanOp ( math::TanOp op,
PatternRewriter & rewriter )
static

◆ createFloatConst() [1/2]

◆ createFloatConst() [2/2]

Value createFloatConst ( Location loc,
Type type,
double value,
OpBuilder & b )
static

Definition at line 45 of file ExpandOps.cpp.

◆ createIntConst()

Value createIntConst ( Location loc,
Type type,
int64_t value,
OpBuilder & b )
static

Create an integer constant.

Definition at line 51 of file ExpandOps.cpp.

Referenced by convertCtlzOp(), convertRoundEvenOp(), and convertRoundOp().

◆ createTruncatedFPValue()

Value createTruncatedFPValue ( Value operand,
ImplicitLocOpBuilder & b )
static

Definition at line 62 of file ExpandOps.cpp.

Referenced by convertCeilOp(), and convertRoundOp().