|
MLIR 23.0.0git
|
#include "mlir/Dialect/Tosa/IR/TosaOps.h"#include "mlir/Dialect/Quant/IR/Quant.h"#include "mlir/Dialect/Shard/Interfaces/ShardingInterface.h"#include "mlir/Dialect/Tensor/IR/Tensor.h"#include "mlir/Dialect/Tosa/Utils/QuantUtils.h"#include "mlir/Dialect/Tosa/Utils/ShapeUtils.h"#include "mlir/Dialect/Utils/IndexingUtils.h"#include "mlir/Dialect/Utils/VerificationUtils.h"#include "mlir/IR/BuiltinTypes.h"#include "mlir/IR/DialectImplementation.h"#include "mlir/IR/Matchers.h"#include "mlir/IR/TypeUtilities.h"#include "mlir/Interfaces/InferTypeOpInterface.h"#include "mlir/Transforms/InliningUtils.h"#include "llvm/ADT/APFloat.h"#include "llvm/ADT/SmallVectorExtras.h"#include "llvm/ADT/TypeSwitch.h"#include <numeric>#include "mlir/Dialect/Tosa/IR/TosaOpsDialect.cpp.inc"#include "mlir/Dialect/Tosa/Utils/ConversionUtils.h"#include "mlir/Dialect/Tosa/IR/TosaAvailability.cpp.inc"#include "mlir/Dialect/Tosa/IR/TosaEnums.cpp.inc"#include "mlir/Dialect/Tosa/IR/TosaInterfaces.cpp.inc"#include "mlir/Dialect/Tosa/IR/TosaOpAvailabilityImpl.inc"#include "mlir/Dialect/Tosa/IR/TosaDialectBytecode.cpp.inc"#include "mlir/Dialect/Tosa/IR/TosaOpsTypesBase.cpp.inc"#include "mlir/Dialect/Tosa/IR/TosaOps.cpp.inc"#include "mlir/Dialect/Tosa/IR/TosaAttributes.cpp.inc"Go to the source code of this file.
Macros | |
| #define | GET_TYPEDEF_LIST |
| #define | GET_OP_LIST |
| #define | GET_ATTRDEF_LIST |
| #define | ZERO_POINT_HELPER(OP, OPERAND_NAME, SIGN_EXTEND) |
| #define | COMPATIBLE_RETURN_TYPES(OP) |
| #define | REDUCE_SHAPE_INFER(OP) |
| #define | NARY_SHAPE_INFER(OP) |
| #define | GET_ATTRDEF_CLASSES |
| #define | GET_TYPEDEF_CLASSES |
| #define | GET_OP_CLASSES |
Functions | |
| static SmallVector< int64_t > | convertToMlirShape (ArrayRef< int64_t > shape) |
| static std::optional< int64_t > | idivCheck (const int64_t lhs, const int64_t rhs) |
| static Type | getStorageElementTypeOrSelf (Type type) |
| static Type | getStorageElementTypeOrSelf (Value value) |
| static LogicalResult | verifyRescaleValueAndZpTypes (Operation *op, Value val, Value valZp, StringRef name) |
| LogicalResult | tryUpdateDimOrFailure (Operation *op, int64_t &currDim, const int64_t newDim, const StringRef operandName, const StringRef dimName) |
| LogicalResult | verifyConvOutputSize (Operation *op, const int64_t inputSize, const int64_t kernelSize, const int64_t outputSize, const int64_t padBefore, const int64_t padAfter, const int64_t stride, const int64_t dilation, const llvm::StringRef dimName, const llvm::StringRef dimAxis, const llvm::StringRef padBeforeName, const llvm::StringRef padAfterName) |
| template<typename T> | |
| static LogicalResult | verifyConvOp (T op) |
| template<typename T> | |
| static LogicalResult | verifyConvOpModes (T op) |
| template<typename T> | |
| static LogicalResult | verifyConvOpErrorIf (T op) |
| static LogicalResult | errorIfTypeOrShapeMismatch (Operation *op, Type type1, StringRef name1, Type type2, StringRef name2) |
| static LogicalResult | errorIfTypeOrShapeMismatch (Operation *op, ValueRange list1, StringRef name1, ValueRange list2, StringRef name2) |
| static LogicalResult | errorIfShapeNotSizeOne (Operation *op, Type type) |
| template<typename T> | |
| static LogicalResult | verifyVariableOpErrorIf (T op, Type type, StringRef name) |
| template<typename T> | |
| static LogicalResult | verifySameElementTypes (T op, Type aType, Type bType, StringRef aName="input", StringRef bName="output") |
| template<typename T> | |
| static LogicalResult | verifyPoolingOp (T op) |
| static void | buildConvOpWithQuantInfo (OpBuilder &builder, OperationState &result, Type outputType, Value input, Value weight, Value bias, DenseI64ArrayAttr pad, DenseI64ArrayAttr stride, DenseI64ArrayAttr dilation, TypeAttr accType) |
| This builder is called on all convolution operators except TransposeConv, which has specialized output shape semantics. | |
| static void | buildTransConvOpWithQuantInfo (OpBuilder &builder, OperationState &result, Type outputType, Value input, Value weight, Value bias, DenseI64ArrayAttr outpad, DenseI64ArrayAttr stride, TypeAttr accType) |
| Handles tosa.transpose_conv2d which has outpad and output shape attributes. | |
| static void | buildMatMulOpWithQuantInfo (OpBuilder &builder, OperationState &result, Type outputType, Value a, Value b) |
| The tosa.matmul op is also intended to be generated where a fully_connected op must be constructed where the weight is not a constant. | |
| static void | buildAvgPool2dOpWithQuantInfo (OpBuilder &builder, OperationState &result, Type outputType, Value input, DenseArrayAttr kernel, DenseArrayAttr stride, DenseArrayAttr pad, TypeAttr accType) |
| Both the tosa.avg_pool2d and unary ops use the same UnaryOpQuantizationAttr but avg_pool operator has its own builder as it has additional parameters not part of the unary ops. | |
| static void | buildNegateOpWithQuantInfo (OpBuilder &builder, OperationState &result, Type outputType, Value input) |
| This builder is called on single-parameter negate operator to construct input and output zero points based on their types. | |
| static void | buildPadOpWithQuantInfo (OpBuilder &builder, OperationState &result, Type outputType, Value input, Value paddings) |
| This builder is called on TOSA pad operator that needs to create its own OptionalAttr quantization_attr parameter to scale the padding values correctly. | |
| static void | buildVariableOp (OpBuilder &builder, OperationState &result, StringRef name, Type variableType, Attribute initialValue) |
| static FailureOr< int64_t > | resolveBroadcastDim (const int64_t dim1, const int64_t dim2) |
| static LogicalResult | resolveBroadcastShape (const ValueShapeRange &operands, SmallVector< int64_t > &outShape) |
| static LogicalResult | verifyDimIsPowerOfTwo (Operation *op, const int64_t dimSize, const llvm::StringRef dimName) |
| static FailureOr< int64_t > | getZeroPoint (Value val, bool signExtend) |
| template<typename T> | |
| static LogicalResult | verifyZeroPoint (T op, Value val, const int64_t &zp, const std::string &operand) |
| static LogicalResult | verifyZeroPoint (tosa::RescaleOp op, Value zpVal, const int64_t &zp, const std::string &operand) |
| static LogicalResult | ReduceInferReturnTypes (ShapeAdaptor operandShape, Type inputType, IntegerAttr axis, SmallVectorImpl< ShapedTypeComponents > &inferredReturnShapes) |
| template<typename T> | |
| static LogicalResult | verifyReduceOp (T op) |
| static LogicalResult | NAryInferReturnTypes (const ValueShapeRange &operands, SmallVectorImpl< ShapedTypeComponents > &inferredReturnShapes) |
| static LogicalResult | poolingInferReturnTypes (ShapeAdaptor inputShape, ArrayRef< int64_t > kernel, ArrayRef< int64_t > stride, ArrayRef< int64_t > pad, SmallVectorImpl< ShapedTypeComponents > &inferredReturnShapes) |
| static void | printInitializationList (OpAsmPrinter &parser, Block::BlockArgListType blocksArgs, ValueRange initializers, StringRef prefix="") |
| #define COMPATIBLE_RETURN_TYPES | ( | OP | ) |
Definition at line 3215 of file TosaOps.cpp.
| #define GET_ATTRDEF_CLASSES |
Definition at line 4995 of file TosaOps.cpp.
| #define GET_ATTRDEF_LIST |
| #define GET_OP_CLASSES |
Definition at line 5008 of file TosaOps.cpp.
| #define GET_OP_LIST |
| #define GET_TYPEDEF_CLASSES |
Definition at line 5001 of file TosaOps.cpp.
| #define GET_TYPEDEF_LIST |
| #define NARY_SHAPE_INFER | ( | OP | ) |
Definition at line 3317 of file TosaOps.cpp.
| #define REDUCE_SHAPE_INFER | ( | OP | ) |
Definition at line 3224 of file TosaOps.cpp.
| #define ZERO_POINT_HELPER | ( | OP, | |
| OPERAND_NAME, | |||
| SIGN_EXTEND ) |
Definition at line 2696 of file TosaOps.cpp.
|
static |
Both the tosa.avg_pool2d and unary ops use the same UnaryOpQuantizationAttr but avg_pool operator has its own builder as it has additional parameters not part of the unary ops.
Definition at line 1355 of file TosaOps.cpp.
References mlir::tosa::buildUnaryOpQuantizationAttr(), mlir::tosa::createZeroPointTensor(), mlir::emitError(), mlir::Value::getType(), and result.
|
static |
This builder is called on all convolution operators except TransposeConv, which has specialized output shape semantics.
The builder also defines the bitwidth of the output given the bit width of the input & weight content.
Definition at line 1280 of file TosaOps.cpp.
References mlir::tosa::buildConvOpQuantizationAttr(), mlir::tosa::buildConvOpResultTypeInfo(), mlir::tosa::createZPsAsConst(), and result.
|
static |
The tosa.matmul op is also intended to be generated where a fully_connected op must be constructed where the weight is not a constant.
In this case, the fully_connected op must be expressed using matmul. TODO: Add link to the leglization document explaining this.
Definition at line 1326 of file TosaOps.cpp.
References b, mlir::tosa::buildMatMulOpQuantizationAttr(), mlir::tosa::createZPsAsConst(), mlir::Builder::getI32Type(), mlir::Builder::getIntegerType(), getStorageElementTypeOrSelf(), mlir::Value::getType(), and result.
|
static |
This builder is called on single-parameter negate operator to construct input and output zero points based on their types.
Definition at line 1400 of file TosaOps.cpp.
References mlir::tosa::buildUnaryOpQuantizationAttr(), mlir::tosa::createZeroPointTensor(), mlir::emitError(), mlir::Value::getType(), and result.
|
static |
This builder is called on TOSA pad operator that needs to create its own OptionalAttr quantization_attr parameter to scale the padding values correctly.
No pad_const is interpreted as zero-padding.
Definition at line 1440 of file TosaOps.cpp.
References mlir::tosa::buildPadOpQuantizationAttr(), mlir::tosa::createPadConstTensor(), and result.
|
static |
Handles tosa.transpose_conv2d which has outpad and output shape attributes.
Definition at line 1304 of file TosaOps.cpp.
References mlir::tosa::buildConvOpQuantizationAttr(), mlir::tosa::buildConvOpResultTypeInfo(), mlir::tosa::createZPsAsConst(), and result.
|
static |
Definition at line 1454 of file TosaOps.cpp.
References mlir::tosa::convertFromMlirShape(), mlir::emitError(), mlir::Builder::getIndexTensorAttr(), mlir::Builder::getStringAttr(), and result.
|
static |
Definition at line 138 of file TosaOps.cpp.
Referenced by mlir::tosa::printVariableOpTypeOrInitialValue().
Definition at line 979 of file TosaOps.cpp.
References mlir::ShapeAdaptor::getNumElements(), mlir::ShapeAdaptor::hasRank(), mlir::ShapeAdaptor::hasStaticShape(), and success().
|
static |
Definition at line 937 of file TosaOps.cpp.
References mlir::Operation::emitOpError(), success(), and mlir::verifyCompatibleShape().
Referenced by errorIfTypeOrShapeMismatch(), and verifyVariableOpErrorIf().
|
static |
Definition at line 961 of file TosaOps.cpp.
References mlir::Operation::emitOpError(), errorIfTypeOrShapeMismatch(), mlir::ValueRange::getTypes(), and success().
Definition at line 574 of file TosaOps.cpp.
References mlir::getElementTypeOrSelf(), and mlir::tosa::getStorageElementTypeFromQuantized().
Referenced by buildMatMulOpWithQuantInfo(), mlir::tosa::createPadConstTensor(), mlir::tosa::createZeroPointTensor(), getStorageElementTypeOrSelf(), verifyConvOp(), and verifyRescaleValueAndZpTypes().
Definition at line 581 of file TosaOps.cpp.
References getStorageElementTypeOrSelf(), and mlir::Value::getType().
Definition at line 2626 of file TosaOps.cpp.
References mlir::m_Constant(), and mlir::matchPattern().
Referenced by mlir::quant::UniformQuantizedValueConverter::UniformQuantizedValueConverter().
Definition at line 568 of file TosaOps.cpp.
Referenced by mlir::tosa::createTosaValidation(), mlir::tosa::impl::TosaValidationBase< DerivedT >::createTosaValidation, verifyConvOutputSize(), and verifyPoolingOp().
|
static |
Definition at line 3305 of file TosaOps.cpp.
References resolveBroadcastShape(), and success().
|
static |
Definition at line 3414 of file TosaOps.cpp.
References mlir::ShapeAdaptor::getDimSize(), mlir::ShapeAdaptor::hasRank(), and success().
|
static |
Definition at line 4460 of file TosaOps.cpp.
|
static |
Definition at line 3199 of file TosaOps.cpp.
References mlir::ShapeAdaptor::getDims(), mlir::ShapeAdaptor::getRank(), mlir::ShapeAdaptor::hasRank(), and success().
Definition at line 1484 of file TosaOps.cpp.
Referenced by resolveBroadcastShape().
|
static |
Definition at line 1498 of file TosaOps.cpp.
References mlir::ValueShapeRange::getShape(), resolveBroadcastDim(), and success().
Referenced by NAryInferReturnTypes().
| LogicalResult tryUpdateDimOrFailure | ( | Operation * | op, |
| int64_t & | currDim, | ||
| const int64_t | newDim, | ||
| const StringRef | operandName, | ||
| const StringRef | dimName ) |
Definition at line 628 of file TosaOps.cpp.
References mlir::Operation::emitOpError(), and success().
|
static |
Definition at line 680 of file TosaOps.cpp.
References mlir::tosa::getStorageElementTypeFromQuantized(), getStorageElementTypeOrSelf(), and success().
|
static |
Definition at line 834 of file TosaOps.cpp.
References success(), and verifyConvOutputSize().
|
static |
Definition at line 785 of file TosaOps.cpp.
References mlir::tosa::getStorageElementTypeFromQuantized(), and success().
| LogicalResult verifyConvOutputSize | ( | Operation * | op, |
| const int64_t | inputSize, | ||
| const int64_t | kernelSize, | ||
| const int64_t | outputSize, | ||
| const int64_t | padBefore, | ||
| const int64_t | padAfter, | ||
| const int64_t | stride, | ||
| const int64_t | dilation, | ||
| const llvm::StringRef | dimName, | ||
| const llvm::StringRef | dimAxis, | ||
| const llvm::StringRef | padBeforeName, | ||
| const llvm::StringRef | padAfterName ) |
Definition at line 643 of file TosaOps.cpp.
References mlir::Operation::emitOpError(), idivCheck(), and success().
Referenced by verifyConvOpErrorIf().
|
static |
Definition at line 1584 of file TosaOps.cpp.
References mlir::Operation::emitOpError(), and success().
|
static |
Definition at line 1081 of file TosaOps.cpp.
References idivCheck(), and success().
|
static |
Definition at line 3249 of file TosaOps.cpp.
References mlir::TensorType::getShape(), mlir::TensorType::hasRank(), and success().
|
static |
Definition at line 585 of file TosaOps.cpp.
References mlir::Operation::emitOpError(), mlir::Type::getIntOrFloatBitWidth(), getStorageElementTypeOrSelf(), mlir::Value::getType(), and success().
|
static |
Definition at line 1015 of file TosaOps.cpp.
References success().
|
static |
Definition at line 988 of file TosaOps.cpp.
References errorIfTypeOrShapeMismatch(), mlir::tosa::getVariableType(), mlir::SymbolTable::lookup(), and success().
|
static |
Definition at line 2654 of file TosaOps.cpp.
References mlir::getElementTypeOrSelf(), mlir::Type::isInteger(), and success().
|
static |
Definition at line 2669 of file TosaOps.cpp.
References mlir::getElementTypeOrSelf(), mlir::Type::isInteger(), and success().