MLIR 23.0.0git
ExpandOps.cpp File Reference

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 bool isUnrankedShaped (Type type)
 Returns true if the type is an unranked shaped type (e.g., tensor<*xf32>).
static Value createFloatConst (Location loc, Type type, APFloat value, OpBuilder &b, Value dynamicShapeRef=Value())
 Create a float constant.
static Value createFloatConst (Location loc, Type type, double value, OpBuilder &b, Value dynamicShapeRef=Value())
static Value createIntConst (Location loc, Type type, int64_t value, OpBuilder &b, Value dynamicShapeRef=Value())
 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 25 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()

◆ convertClampfOp()

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

◆ convertCoshOp()

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

◆ 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 265 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

◆ 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 155 of file ExpandOps.cpp.

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

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

◆ convertTanOp()

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

◆ createFloatConst() [1/2]

Value createFloatConst ( Location loc,
Type type,
APFloat value,
OpBuilder & b,
Value dynamicShapeRef = Value() )
static

Create a float constant.

For dynamically-shaped tensors, creates a scalar constant and uses tensor.dim + tensor.splat to broadcast to the target shape. The optional dynamicShapeRef provides the runtime dimension sizes.

Definition at line 39 of file ExpandOps.cpp.

Referenced by mlir::math::impl::MathExpandOpsPassBase< DerivedT >::clonePass(), convertAcoshOp(), convertAsinhOp(), convertAtanhOp(), convertCeilOp(), convertCoshOp(), convertExp2fOp(), convertFPowIOp(), convertPowfOp(), convertRoundEvenOp(), convertRoundOp(), convertRsqrtOp(), convertSinhOp(), and convertTanhOp().

◆ createFloatConst() [2/2]

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

Definition at line 66 of file ExpandOps.cpp.

◆ createIntConst()

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

Create an integer constant.

For dynamically-shaped tensors, creates a scalar constant and uses tensor.dim + tensor.splat to broadcast to the target shape. The optional dynamicShapeRef provides the runtime dimension sizes.

Definition at line 74 of file ExpandOps.cpp.

References b, mlir::DenseElementsAttr::get(), and mlir::getElementTypeOrSelf().

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

◆ createTruncatedFPValue()

Value createTruncatedFPValue ( Value operand,
ImplicitLocOpBuilder & b )
static

Definition at line 97 of file ExpandOps.cpp.

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

Referenced by convertCeilOp(), and convertRoundOp().

◆ isUnrankedShaped()

bool isUnrankedShaped ( Type type)
static

Returns true if the type is an unranked shaped type (e.g., tensor<*xf32>).

Unranked types can't be expanded because tensor.splat requires ranked types.

Definition at line 31 of file ExpandOps.cpp.

Referenced by convertAcoshOp(), convertAsinhOp(), convertAtanhOp(), convertCeilOp(), convertCoshOp(), convertCtlzOp(), convertExp2fOp(), convertRoundEvenOp(), convertRoundOp(), convertRsqrtOp(), convertSinhOp(), and convertTanhOp().