MLIR 22.0.0git
PolynomialApproximation.cpp File Reference
#include <climits>
#include <cmath>
#include <cstddef>
#include "mlir/Dialect/Arith/IR/Arith.h"
#include "mlir/Dialect/Math/IR/Math.h"
#include "mlir/Dialect/Math/Transforms/Approximation.h"
#include "mlir/Dialect/Math/Transforms/Passes.h"
#include "mlir/Dialect/Utils/IndexingUtils.h"
#include "mlir/Dialect/Vector/IR/VectorOps.h"
#include "mlir/Dialect/Vector/Utils/VectorUtils.h"
#include "mlir/Dialect/X86Vector/X86VectorDialect.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/OpDefinition.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/IR/TypeUtilities.h"
#include "mlir/Transforms/DialectConversion.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/MathExtras.h"

Go to the source code of this file.

Classes

struct  VectorShape

Macros

#define LN2_VALUE    0.693147180559945309417232121458176568075500134360255254120680009493393621L
#define LOG2E_VALUE    1.442695040888963407359924681001892137426645954152985934135449406931109219L
#define TWO_OVER_PI    0.6366197723675813430755350534900574481378385829618257949906693762L
#define PI_OVER_2    1.5707963267948966192313216916397514420985846996875529104874722961L

Functions

static std::optional< VectorShapevectorShape (Type type)
static std::optional< VectorShapevectorShape (Value value)
static Type broadcast (Type type, std::optional< VectorShape > shape)
static Value broadcast (ImplicitLocOpBuilder &builder, Value value, std::optional< VectorShape > shape)
static Value handleMultidimensionalVectors (ImplicitLocOpBuilder &builder, ValueRange operands, int64_t vectorWidth, llvm::function_ref< Value(ValueRange)> compute)
static Value boolCst (ImplicitLocOpBuilder &builder, bool value)
static Value floatCst (ImplicitLocOpBuilder &builder, float value, Type elementType)
static Value f32Cst (ImplicitLocOpBuilder &builder, double value)
static Value i32Cst (ImplicitLocOpBuilder &builder, int32_t value)
static Value f32FromBits (ImplicitLocOpBuilder &builder, uint32_t bits)
static Value min (ImplicitLocOpBuilder &builder, Value value, Value bound)
static Value max (ImplicitLocOpBuilder &builder, Value value, Value bound)
static Value clamp (ImplicitLocOpBuilder &builder, Value value, Value lowerBound, Value upperBound)
static std::pair< Value, Valuefrexp (ImplicitLocOpBuilder &builder, Value arg, bool isPositive=false)
static Value exp2I32 (ImplicitLocOpBuilder &builder, Value arg)
template<typename T>
LogicalResult insertCasts (Operation *op, PatternRewriter &rewriter)
template<typename OpType>
static void populateMathF32ExpansionPattern (RewritePatternSet &patterns, llvm::function_ref< bool(StringRef)> predicate, PatternBenefit benefit)
template<typename OpType, typename PatternType>
static void populateMathPolynomialApproximationPattern (RewritePatternSet &patterns, llvm::function_ref< bool(StringRef)> predicate, PatternBenefit benefit)

Macro Definition Documentation

◆ LN2_VALUE

#define LN2_VALUE    0.693147180559945309417232121458176568075500134360255254120680009493393621L

Definition at line 620 of file PolynomialApproximation.cpp.

◆ LOG2E_VALUE

#define LOG2E_VALUE    1.442695040888963407359924681001892137426645954152985934135449406931109219L

Definition at line 622 of file PolynomialApproximation.cpp.

◆ PI_OVER_2

#define PI_OVER_2    1.5707963267948966192313216916397514420985846996875529104874722961L

Definition at line 1482 of file PolynomialApproximation.cpp.

◆ TWO_OVER_PI

#define TWO_OVER_PI    0.6366197723675813430755350534900574481378385829618257949906693762L

Definition at line 1480 of file PolynomialApproximation.cpp.

Function Documentation

◆ boolCst()

Value boolCst ( ImplicitLocOpBuilder & builder,
bool value )
static

◆ broadcast() [1/2]

Value broadcast ( ImplicitLocOpBuilder & builder,
Value value,
std::optional< VectorShape > shape )
static

Definition at line 70 of file PolynomialApproximation.cpp.

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

◆ broadcast() [2/2]

Type broadcast ( Type type,
std::optional< VectorShape > shape )
static

Definition at line 63 of file PolynomialApproximation.cpp.

Referenced by broadcast(), exp2I32(), and frexp().

◆ clamp()

Value clamp ( ImplicitLocOpBuilder & builder,
Value value,
Value lowerBound,
Value upperBound )
static

Definition at line 220 of file PolynomialApproximation.cpp.

References max(), and min().

Referenced by createLinalgBodyCalculationForElementwiseOp(), and wmmaPushOutputOperand().

◆ exp2I32()

◆ f32Cst()

Value f32Cst ( ImplicitLocOpBuilder & builder,
double value )
static

Definition at line 186 of file PolynomialApproximation.cpp.

References mlir::Builder::getF32FloatAttr().

Referenced by frexp().

◆ f32FromBits()

Value f32FromBits ( ImplicitLocOpBuilder & builder,
uint32_t bits )
static

Definition at line 194 of file PolynomialApproximation.cpp.

References mlir::Builder::getF32Type(), and i32Cst().

Referenced by frexp().

◆ floatCst()

◆ frexp()

◆ handleMultidimensionalVectors()

◆ i32Cst()

Value i32Cst ( ImplicitLocOpBuilder & builder,
int32_t value )
static

Definition at line 190 of file PolynomialApproximation.cpp.

References mlir::Builder::getI32IntegerAttr().

Referenced by exp2I32(), f32FromBits(), and frexp().

◆ insertCasts()

◆ max()

◆ min()

◆ populateMathF32ExpansionPattern()

template<typename OpType>
void populateMathF32ExpansionPattern ( RewritePatternSet & patterns,
llvm::function_ref< bool(StringRef)> predicate,
PatternBenefit benefit )
static

Definition at line 1785 of file PolynomialApproximation.cpp.

References mlir::patterns.

Referenced by mlir::populateMathF32ExpansionPatterns().

◆ populateMathPolynomialApproximationPattern()

template<typename OpType, typename PatternType>
void populateMathPolynomialApproximationPattern ( RewritePatternSet & patterns,
llvm::function_ref< bool(StringRef)> predicate,
PatternBenefit benefit )
static

◆ vectorShape() [1/2]

◆ vectorShape() [2/2]

std::optional< VectorShape > vectorShape ( Value value)
static

Definition at line 54 of file PolynomialApproximation.cpp.

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