MLIR
20.0.0git
|
#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/ImplicitLocOpBuilder.h"
#include "mlir/IR/OpDefinition.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/IR/TypeUtilities.h"
#include "mlir/Transforms/DialectConversion.h"
#include "mlir/Transforms/GreedyPatternRewriteDriver.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< VectorShape > | vectorShape (Type type) |
static std::optional< VectorShape > | vectorShape (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 | 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, Value > | frexp (ImplicitLocOpBuilder &builder, Value arg, bool isPositive=false) |
static Value | exp2I32 (ImplicitLocOpBuilder &builder, Value arg) |
template<typename T > | |
LogicalResult | insertCasts (Operation *op, PatternRewriter &rewriter) |
#define LN2_VALUE 0.693147180559945309417232121458176568075500134360255254120680009493393621L |
Definition at line 614 of file PolynomialApproximation.cpp.
#define LOG2E_VALUE 1.442695040888963407359924681001892137426645954152985934135449406931109219L |
Definition at line 616 of file PolynomialApproximation.cpp.
#define PI_OVER_2 1.5707963267948966192313216916397514420985846996875529104874722961L |
Definition at line 1374 of file PolynomialApproximation.cpp.
#define TWO_OVER_PI 0.6366197723675813430755350534900574481378385829618257949906693762L |
Definition at line 1372 of file PolynomialApproximation.cpp.
|
static |
Definition at line 72 of file PolynomialApproximation.cpp.
References broadcast(), mlir::ImplicitLocOpBuilder::create(), and mlir::Value::getType().
|
static |
Definition at line 65 of file PolynomialApproximation.cpp.
References mlir::get().
Referenced by broadcast(), exp2I32(), frexp(), and mlir::math::ErfPolynomialApproximation::matchAndRewrite().
|
static |
Definition at line 216 of file PolynomialApproximation.cpp.
Referenced by createLinalgBodyCalculationForElementwiseOp(), and wmmaPushOutputOperand().
|
static |
Definition at line 264 of file PolynomialApproximation.cpp.
References broadcast(), mlir::ImplicitLocOpBuilder::create(), mlir::getElementTypeOrSelf(), mlir::Builder::getF32Type(), i32Cst(), and vectorShape().
|
static |
Definition at line 184 of file PolynomialApproximation.cpp.
References mlir::ImplicitLocOpBuilder::create(), and mlir::Builder::getF32FloatAttr().
Referenced by frexp().
|
static |
Definition at line 192 of file PolynomialApproximation.cpp.
References mlir::ImplicitLocOpBuilder::create(), mlir::Builder::getF32Type(), and i32Cst().
Referenced by frexp().
|
static |
Definition at line 176 of file PolynomialApproximation.cpp.
References mlir::ImplicitLocOpBuilder::create(), mlir::Builder::getFloatAttr(), mlir::Type::isF16(), and mlir::Type::isF32().
Referenced by mlir::math::ErfPolynomialApproximation::matchAndRewrite().
|
static |
Definition at line 223 of file PolynomialApproximation.cpp.
References broadcast(), mlir::ImplicitLocOpBuilder::create(), f32Cst(), f32FromBits(), mlir::getElementTypeOrSelf(), mlir::Builder::getF32Type(), mlir::Builder::getIntegerType(), i32Cst(), and vectorShape().
Referenced by computeMultiplierAndShiftTosaScale16(), and computeMultiplierAndShiftTosaScale32().
|
static |
Definition at line 99 of file PolynomialApproximation.cpp.
References mlir::computeMaxLinearIndex(), mlir::computeStrides(), mlir::ImplicitLocOpBuilder::create(), mlir::delinearize(), mlir::detail::enumerate(), mlir::get(), mlir::getType(), and mlir::Builder::getZeroAttr().
Referenced by mlir::LLVM::detail::vectorOneToOneRewrite().
|
static |
Definition at line 188 of file PolynomialApproximation.cpp.
References mlir::ImplicitLocOpBuilder::create(), and mlir::Builder::getI32IntegerAttr().
Referenced by exp2I32(), f32FromBits(), and frexp().
LogicalResult insertCasts | ( | Operation * | op, |
PatternRewriter & | rewriter | ||
) |
Definition at line 314 of file PolynomialApproximation.cpp.
References mlir::OpBuilder::create(), mlir::ValueTypeRange< ValueRangeT >::front(), mlir::Operation::getAttrs(), mlir::getElementTypeOrSelf(), mlir::Builder::getF32Type(), mlir::Operation::getLoc(), mlir::Operation::getOperands(), mlir::Operation::getOperandTypes(), mlir::Operation::getResultTypes(), mlir::RewriterBase::notifyMatchFailure(), and mlir::RewriterBase::replaceOpWithNewOp().
|
static |
Definition at line 209 of file PolynomialApproximation.cpp.
References mlir::ImplicitLocOpBuilder::create().
Referenced by mlir::AllocationOpLLVMLowering::alignedAllocationGetAlignment(), mlir::tensor::bubbleUpPadSlice(), mlir::tosa::buildQTypeFromMinMax(), buildSubAndExpOp(), calculateStructAlignment(), mlir::sparse_tensor::detail::checkedMul(), mlir::sparse_tensor::detail::checkOverflowCast(), clamp(), mlir::tosa::clampFloatHelper(), clampInput(), mlir::tosa::clampIntHelper(), computeDirectionVector(), computeMultiplierAndShiftTosaScale16(), computeMultiplierAndShiftTosaScale32(), mlir::presburger::IntegerRelation::computeVolume(), createLinalgBodyCalculationForElementwiseOp(), declareReduction(), executeGetOperandsResults(), generateFusedElementwiseOpRegion(), mlir::quant::CalibratedQuantizedType::get(), mlir::quant::CalibratedQuantizedType::getChecked(), getDefaultStorageParams(), mlir::affine::NestedPattern::getDepth(), mlir::affine::getInnermostCommonLoopDepth(), mlir::affine::getLargestDivisorOfTripCount(), mlir::AffineMap::getLargestKnownDivisorOfMapExprs(), getLocationFromLoc(), mlir::getMaxDimAndSymbol(), getMaxPosOfType(), mlir::presburger::detail::getNonOrthogonalVector(), mlir::detail::PassOptions::getOptionWidth(), mlir::affine::getPerfectlyNestedLoops(), getSemiAffineExprFromFlatForm(), mlir::LLVM::LLVMStructType::getTypeSizeInBits(), mlir::presburger::PresburgerSpace::getVarKindOverlap(), handleByValArgument(), isFusionProfitable(), isIntegerArrayAttrConfinedToRange(), isIntegerArrayAttrConfinedToShape(), mlir::AffineMap::isPermutationOfMinorIdentityWithBroadcasting(), isPrimitiveNthRootOfUnity(), isSumOfIntegerArrayAttrConfinedToShape(), loopScheduling(), mlir::gpu::index_lowering::OpLowering< Op, XOp, YOp, ZOp >::matchAndRewrite(), ClampClampOptimization::matchAndRewrite(), mlir::presburger::Matrix< T >::Matrix(), maybeConstantDimsAttr(), minMaxBy(), mlirCalibratedQuantizedTypeGet(), parseAndVerify< unsigned >(), parseCalibratedType(), parseExpressedTypeAndRange(), mlir::detail::Parser::parseIntegerInDimensionList(), mlir::detail::Parser::parseStridedLayoutAttr(), mlir::printRegisteredPasses(), mlir::ConstantIntRanges::range(), mlir::affine::FlatAffineRelation::removeVarRange(), mlir::InlinerConfig::setMaxInliningIterations(), specializeForLoopForUnrolling(), specializeParallelLoopForUnrolling(), mlir::OpTrait::util::staticallyKnownBroadcastable(), staticallyOutOfBounds(), mlir::affine::substWithMin(), mlir::raw_indented_ostream::unindent(), mlir::presburger::IntegerRelation::unionBoundingBox(), mlir::quant::CalibratedQuantizedType::verifyInvariants(), mlir::linalg::detail::verifyStructuredOpInterface(), mlir::dataflow::IntegerRangeAnalysis::visitNonControlFlowArguments(), and mlir::quant::UniformQuantizedValueConverter::~UniformQuantizedValueConverter().
|
static |
Definition at line 202 of file PolynomialApproximation.cpp.
References mlir::ImplicitLocOpBuilder::create().
Referenced by addOrderingConstraints(), mlir::tensor::bubbleUpPadSlice(), mlir::tosa::buildQTypeFromMinMax(), mlir::sparse_tensor::detail::checkOverflowCast(), clamp(), mlir::tosa::clampFloatHelper(), clampInput(), mlir::tosa::clampIntHelper(), computeDirectionVector(), mlir::presburger::IntegerRelation::computeVolume(), createLinalgBodyCalculationForElementwiseOp(), declareReduction(), mlir::mesh::MeshSharding::equalSplitAndPartialAxes(), mlir::sparse_tensor::genCoIteration(), mlir::quant::CalibratedQuantizedType::get(), mlir::quant::CalibratedQuantizedType::getChecked(), mlir::affine::getConstantTripCount(), getDefaultStorageParams(), mlir::affine::getInnermostCommonLoopDepth(), getMaxLoopDepth(), getNumCommonLoops(), mlir::affine::getNumCommonSurroundingLoops(), mlir::presburger::PresburgerSpace::getVarKindOverlap(), isIntegerArrayAttrConfinedToRange(), isIntegerArrayAttrConfinedToShape(), isSumOfIntegerArrayAttrConfinedToShape(), loopScheduling(), mlir::GPUPrintfOpToHIPLowering::matchAndRewrite(), mlir::gpu::index_lowering::OpLowering< Op, XOp, YOp, ZOp >::matchAndRewrite(), ClampClampOptimization::matchAndRewrite(), memsetRewire(), minMaxBy(), minMaxValueForFloat(), minMaxValueForSignedInt(), minMaxValueForUnsignedInt(), mlirCalibratedQuantizedTypeGet(), parseCalibratedType(), parseExpressedTypeAndRange(), mlir::detail::pass_options::printOptionValue(), mlir::raw_indented_ostream::printReindented(), mlir::ConstantIntRanges::range(), mlir::presburger::IntegerRelation::removeVarRange(), mlir::affine::FlatAffineRelation::removeVarRange(), specializeForLoopForUnrolling(), specializeParallelLoopForUnrolling(), mlir::affine::substWithMin(), mlir::presburger::IntegerRelation::unionBoundingBox(), mlir::quant::CalibratedQuantizedType::verifyInvariants(), mlir::linalg::detail::verifyStructuredOpInterface(), mlir::dataflow::IntegerRangeAnalysis::visitNonControlFlowArguments(), and mlir::quant::UniformQuantizedValueConverter::~UniformQuantizedValueConverter().
|
static |
Definition at line 49 of file PolynomialApproximation.cpp.
Referenced by exp2I32(), foreachIndividualVectorElement(), frexp(), VectorizationState::getCanonicalVecType(), mlir::vector::isContiguousSlice(), mlir::math::ErfPolynomialApproximation::matchAndRewrite(), and vectorShape().
|
static |
Definition at line 56 of file PolynomialApproximation.cpp.
References mlir::Value::getType(), and vectorShape().