MLIR
21.0.0git
|
#include "mlir/Dialect/Tosa/IR/TosaOps.h"
#include "mlir/Dialect/Mesh/Interfaces/ShardingInterface.h"
#include "mlir/Dialect/Quant/IR/Quant.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/IR/BuiltinTypes.h"
#include "mlir/IR/DialectImplementation.h"
#include "mlir/IR/Matchers.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/IR/TypeUtilities.h"
#include "mlir/Interfaces/InferTypeOpInterface.h"
#include "mlir/Transforms/InliningUtils.h"
#include "llvm/ADT/APFloat.h"
#include "llvm/ADT/DenseMap.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) |
#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 | |
std::optional< int64_t > | idivCheck (const int64_t lhs, const int64_t rhs) |
Type | getStorageElementTypeOrSelf (Type type) |
Type | getStorageElementTypeOrSelf (Value value) |
static LogicalResult | verifyRescaleValueAndZpTypes (Operation *op, Value val, Value valZp, StringRef name) |
template<typename T > | |
static LogicalResult | verifyConvOp (T op) |
template<typename T > | |
static LogicalResult | verifyConvOpModes (T op) |
template<typename T > | |
static LogicalResult | verifySameElementTypes (T op, Type inType, Type outType) |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
static LogicalResult | resolveBroadcastShape (const ValueShapeRange &operands, SmallVector< int64_t > &outShape) |
static LogicalResult | verifyDimIsPowerOfTwo (Operation *op, const int64_t dimSize, const llvm::StringRef dimName) |
static SmallVector< int64_t > | convertToMlirShape (ArrayRef< int64_t > shape) |
template<typename T > | |
static FailureOr< int64_t > | getZeroPoint (T op, Value val) |
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 2258 of file TosaOps.cpp.
#define GET_ATTRDEF_CLASSES |
Definition at line 3417 of file TosaOps.cpp.
#define GET_ATTRDEF_LIST |
#define GET_OP_CLASSES |
Definition at line 3430 of file TosaOps.cpp.
#define GET_OP_LIST |
#define GET_TYPEDEF_CLASSES |
Definition at line 3423 of file TosaOps.cpp.
#define GET_TYPEDEF_LIST |
#define NARY_SHAPE_INFER | ( | OP | ) |
Definition at line 2360 of file TosaOps.cpp.
#define REDUCE_SHAPE_INFER | ( | OP | ) |
Definition at line 2267 of file TosaOps.cpp.
#define ZERO_POINT_HELPER | ( | OP, | |
OPERAND_NAME | |||
) |
Definition at line 1870 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 764 of file TosaOps.cpp.
References mlir::OperationState::addAttribute(), mlir::OperationState::addOperands(), mlir::tosa::buildUnaryOpQuantizationAttr(), mlir::tosa::createZeroPointTensor(), mlir::emitError(), mlir::Value::getType(), mlir::OperationState::location, and mlir::OperationState::types.
|
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 689 of file TosaOps.cpp.
References mlir::OperationState::addAttribute(), mlir::OperationState::addOperands(), mlir::OperationState::addTypes(), mlir::tosa::buildConvOpQuantizationAttr(), mlir::tosa::buildConvOpResultTypeInfo(), and mlir::tosa::createZPsAsConst().
|
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 735 of file TosaOps.cpp.
References mlir::OperationState::addOperands(), mlir::OperationState::addTypes(), mlir::tosa::buildMatMulOpQuantizationAttr(), mlir::tosa::createZPsAsConst(), mlir::Builder::getI32Type(), mlir::Builder::getIntegerType(), getStorageElementTypeOrSelf(), and mlir::Value::getType().
|
static |
This builder is called on single-parameter negate operator to construct input and output zero points based on their types.
Definition at line 809 of file TosaOps.cpp.
References mlir::OperationState::addOperands(), mlir::tosa::buildUnaryOpQuantizationAttr(), mlir::tosa::createZeroPointTensor(), mlir::emitError(), mlir::Value::getType(), mlir::OperationState::location, and mlir::OperationState::types.
|
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 849 of file TosaOps.cpp.
References mlir::OperationState::addOperands(), mlir::tosa::buildPadOpQuantizationAttr(), mlir::tosa::createPadConstTensor(), mlir::OperationState::location, and mlir::OperationState::types.
|
static |
Handles tosa.transpose_conv2d which has outpad and output shape attributes.
Definition at line 713 of file TosaOps.cpp.
References mlir::OperationState::addAttribute(), mlir::OperationState::addOperands(), mlir::OperationState::addTypes(), mlir::tosa::buildConvOpQuantizationAttr(), mlir::tosa::buildConvOpResultTypeInfo(), and mlir::tosa::createZPsAsConst().
|
static |
Definition at line 1377 of file TosaOps.cpp.
Definition at line 229 of file TosaOps.cpp.
References mlir::getElementTypeOrSelf().
Referenced by buildMatMulOpWithQuantInfo(), mlir::tosa::createPadConstTensor(), mlir::tosa::createZeroPointTensor(), getStorageElementTypeOrSelf(), verifyConvOp(), and verifyRescaleValueAndZpTypes().
Definition at line 236 of file TosaOps.cpp.
References getStorageElementTypeOrSelf(), and mlir::Value::getType().
|
static |
Definition at line 1803 of file TosaOps.cpp.
References mlir::m_Constant(), and mlir::matchPattern().
std::optional<int64_t> idivCheck | ( | const int64_t | lhs, |
const int64_t | rhs | ||
) |
Definition at line 223 of file TosaOps.cpp.
Referenced by verifyPoolingOp().
|
static |
Definition at line 2348 of file TosaOps.cpp.
References resolveBroadcastShape().
|
static |
Definition at line 2457 of file TosaOps.cpp.
References mlir::ShapeAdaptor::getDimSize().
|
static |
Definition at line 3274 of file TosaOps.cpp.
|
static |
Definition at line 2242 of file TosaOps.cpp.
References mlir::ShapeAdaptor::getDims(), mlir::ShapeAdaptor::getRank(), and mlir::ShapeAdaptor::hasRank().
|
static |
Definition at line 867 of file TosaOps.cpp.
References mlir::ValueShapeRange::getShape().
Referenced by NAryInferReturnTypes().
|
static |
Definition at line 280 of file TosaOps.cpp.
References getStorageElementTypeOrSelf().
|
static |
Definition at line 396 of file TosaOps.cpp.
|
static |
Definition at line 956 of file TosaOps.cpp.
References mlir::Operation::emitOpError().
|
static |
Definition at line 507 of file TosaOps.cpp.
References idivCheck().
|
static |
Definition at line 2292 of file TosaOps.cpp.
References mlir::TensorType::getShape(), and mlir::TensorType::hasRank().
|
static |
Definition at line 240 of file TosaOps.cpp.
References mlir::Operation::emitOpError(), mlir::Type::getIntOrFloatBitWidth(), getStorageElementTypeOrSelf(), and mlir::Value::getType().
|
static |
Definition at line 443 of file TosaOps.cpp.
|
static |
Definition at line 1828 of file TosaOps.cpp.
References mlir::getElementTypeOrSelf(), and mlir::Type::isInteger().
|
static |
Definition at line 1843 of file TosaOps.cpp.
References mlir::getElementTypeOrSelf(), and mlir::Type::isInteger().