MLIR  21.0.0git
Macros | Functions
TosaOps.cpp File Reference
#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="")
 

Macro Definition Documentation

◆ COMPATIBLE_RETURN_TYPES

#define COMPATIBLE_RETURN_TYPES (   OP)
Value:
bool OP::isCompatibleReturnTypes(TypeRange l, TypeRange r) { \
if (l.size() != r.size() || l.size() != 1) \
return false; \
return false; \
return succeeded(verifyCompatibleShape(l[0], r[0])); \
}
This class provides an abstraction over the various different ranges of value types.
Definition: TypeRange.h:37
Type getElementTypeOrSelf(Type type)
Return the element type or return the type itself.
LogicalResult verifyCompatibleShape(ArrayRef< int64_t > shape1, ArrayRef< int64_t > shape2)
Returns success if the given two shapes are compatible.

Definition at line 2258 of file TosaOps.cpp.

◆ GET_ATTRDEF_CLASSES

#define GET_ATTRDEF_CLASSES

Definition at line 3417 of file TosaOps.cpp.

◆ GET_ATTRDEF_LIST

#define GET_ATTRDEF_LIST

◆ GET_OP_CLASSES

#define GET_OP_CLASSES

Definition at line 3430 of file TosaOps.cpp.

◆ GET_OP_LIST

#define GET_OP_LIST

◆ GET_TYPEDEF_CLASSES

#define GET_TYPEDEF_CLASSES

Definition at line 3423 of file TosaOps.cpp.

◆ GET_TYPEDEF_LIST

#define GET_TYPEDEF_LIST

◆ NARY_SHAPE_INFER

#define NARY_SHAPE_INFER (   OP)
Value:
LogicalResult OP::inferReturnTypeComponents( \
MLIRContext *context, ::std::optional<Location> location, \
ValueShapeRange operands, DictionaryAttr attributes, \
OpaqueProperties properties, RegionRange regions, \
SmallVectorImpl<ShapedTypeComponents> &inferredReturnShapes) { \
return NAryInferReturnTypes(operands, inferredReturnShapes); \
}
static LogicalResult NAryInferReturnTypes(const ValueShapeRange &operands, SmallVectorImpl< ShapedTypeComponents > &inferredReturnShapes)
Definition: TosaOps.cpp:2348
MLIRContext is the top-level object for a collection of MLIR operations.
Definition: MLIRContext.h:60
Simple wrapper around a void* in order to express generically how to pass in op properties through AP...
This class provides an abstraction over the different types of ranges over Regions.
Definition: Region.h:346
Range of values and shapes (corresponding effectively to Shapes dialect's ValueShape type concept).

Definition at line 2360 of file TosaOps.cpp.

◆ REDUCE_SHAPE_INFER

#define REDUCE_SHAPE_INFER (   OP)
Value:
LogicalResult OP::inferReturnTypeComponents( \
MLIRContext *context, ::std::optional<Location> location, \
OP::Adaptor adaptor, \
SmallVectorImpl<ShapedTypeComponents> &inferredReturnShapes) { \
Type inputType = \
llvm::cast<TensorType>(adaptor.getInput().getType()).getElementType(); \
ShapeAdaptor inputShape(adaptor.getInput().getType()); \
const Properties &prop = adaptor.getProperties(); \
return ReduceInferReturnTypes(inputShape, inputType, prop.axis, \
inferredReturnShapes); \
} \
COMPATIBLE_RETURN_TYPES(OP)
static LogicalResult ReduceInferReturnTypes(ShapeAdaptor operandShape, Type inputType, IntegerAttr axis, SmallVectorImpl< ShapedTypeComponents > &inferredReturnShapes)
Definition: TosaOps.cpp:2242

Definition at line 2267 of file TosaOps.cpp.

◆ ZERO_POINT_HELPER

#define ZERO_POINT_HELPER (   OP,
  OPERAND_NAME 
)
Value:
FailureOr<int64_t> tosa::OP::get##OPERAND_NAME##ZeroPoint() { \
return getZeroPoint(*this, get##OPERAND_NAME##Zp()); \
} \
LogicalResult tosa::OP::verify##OPERAND_NAME##ZeroPoint(int64_t zp) { \
return verifyZeroPoint(*this, get##OPERAND_NAME##Zp(), zp, #OPERAND_NAME); \
}
static FailureOr< int64_t > getZeroPoint(T op, Value val)
Definition: TosaOps.cpp:1803
static LogicalResult verifyZeroPoint(T op, Value val, const int64_t &zp, const std::string &operand)
Definition: TosaOps.cpp:1828
auto get(MLIRContext *context, Ts &&...params)
Helper method that injects context only if needed, this helps unify some of the attribute constructio...
LogicalResult verify(Operation *op, bool verifyRecursively=true)
Perform (potentially expensive) checks of invariants, used to detect compiler bugs,...
Definition: Verifier.cpp:419

Definition at line 1870 of file TosaOps.cpp.

Function Documentation

◆ buildAvgPool2dOpWithQuantInfo()

static void buildAvgPool2dOpWithQuantInfo ( OpBuilder builder,
OperationState result,
Type  outputType,
Value  input,
DenseArrayAttr  kernel,
DenseArrayAttr  stride,
DenseArrayAttr  pad,
TypeAttr  accType 
)
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.

◆ buildConvOpWithQuantInfo()

static void buildConvOpWithQuantInfo ( OpBuilder builder,
OperationState result,
Type  outputType,
Value  input,
Value  weight,
Value  bias,
DenseI64ArrayAttr  pad,
DenseI64ArrayAttr  stride,
DenseI64ArrayAttr  dilation,
TypeAttr  accType 
)
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().

◆ buildMatMulOpWithQuantInfo()

static void buildMatMulOpWithQuantInfo ( OpBuilder builder,
OperationState result,
Type  outputType,
Value  a,
Value  b 
)
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().

◆ buildNegateOpWithQuantInfo()

static void buildNegateOpWithQuantInfo ( OpBuilder builder,
OperationState result,
Type  outputType,
Value  input 
)
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.

◆ buildPadOpWithQuantInfo()

static void buildPadOpWithQuantInfo ( OpBuilder builder,
OperationState result,
Type  outputType,
Value  input,
Value  paddings 
)
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.

◆ buildTransConvOpWithQuantInfo()

static void buildTransConvOpWithQuantInfo ( OpBuilder builder,
OperationState result,
Type  outputType,
Value  input,
Value  weight,
Value  bias,
DenseI64ArrayAttr  outpad,
DenseI64ArrayAttr  stride,
TypeAttr  accType 
)
static

◆ convertToMlirShape()

static SmallVector<int64_t> convertToMlirShape ( ArrayRef< int64_t >  shape)
static

Definition at line 1377 of file TosaOps.cpp.

◆ getStorageElementTypeOrSelf() [1/2]

Type getStorageElementTypeOrSelf ( Type  type)

◆ getStorageElementTypeOrSelf() [2/2]

Type getStorageElementTypeOrSelf ( Value  value)

Definition at line 236 of file TosaOps.cpp.

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

◆ getZeroPoint()

template<typename T >
static FailureOr<int64_t> getZeroPoint ( op,
Value  val 
)
static

Definition at line 1803 of file TosaOps.cpp.

References mlir::m_Constant(), and mlir::matchPattern().

◆ idivCheck()

std::optional<int64_t> idivCheck ( const int64_t  lhs,
const int64_t  rhs 
)

Definition at line 223 of file TosaOps.cpp.

Referenced by verifyPoolingOp().

◆ NAryInferReturnTypes()

static LogicalResult NAryInferReturnTypes ( const ValueShapeRange operands,
SmallVectorImpl< ShapedTypeComponents > &  inferredReturnShapes 
)
static

Definition at line 2348 of file TosaOps.cpp.

References resolveBroadcastShape().

◆ poolingInferReturnTypes()

static LogicalResult poolingInferReturnTypes ( ShapeAdaptor  inputShape,
ArrayRef< int64_t >  kernel,
ArrayRef< int64_t >  stride,
ArrayRef< int64_t >  pad,
SmallVectorImpl< ShapedTypeComponents > &  inferredReturnShapes 
)
static

Definition at line 2457 of file TosaOps.cpp.

References mlir::ShapeAdaptor::getDimSize().

◆ printInitializationList()

static void printInitializationList ( OpAsmPrinter parser,
Block::BlockArgListType  blocksArgs,
ValueRange  initializers,
StringRef  prefix = "" 
)
static

Definition at line 3274 of file TosaOps.cpp.

◆ ReduceInferReturnTypes()

static LogicalResult ReduceInferReturnTypes ( ShapeAdaptor  operandShape,
Type  inputType,
IntegerAttr  axis,
SmallVectorImpl< ShapedTypeComponents > &  inferredReturnShapes 
)
static

◆ resolveBroadcastShape()

static LogicalResult resolveBroadcastShape ( const ValueShapeRange operands,
SmallVector< int64_t > &  outShape 
)
static

Definition at line 867 of file TosaOps.cpp.

References mlir::ValueShapeRange::getShape().

Referenced by NAryInferReturnTypes().

◆ verifyConvOp()

template<typename T >
static LogicalResult verifyConvOp ( op)
static

Definition at line 280 of file TosaOps.cpp.

References getStorageElementTypeOrSelf().

◆ verifyConvOpModes()

template<typename T >
static LogicalResult verifyConvOpModes ( op)
static

Definition at line 396 of file TosaOps.cpp.

◆ verifyDimIsPowerOfTwo()

static LogicalResult verifyDimIsPowerOfTwo ( Operation op,
const int64_t  dimSize,
const llvm::StringRef  dimName 
)
static

Definition at line 956 of file TosaOps.cpp.

References mlir::Operation::emitOpError().

◆ verifyPoolingOp()

template<typename T >
static LogicalResult verifyPoolingOp ( op)
static

Definition at line 507 of file TosaOps.cpp.

References idivCheck().

◆ verifyReduceOp()

template<typename T >
static LogicalResult verifyReduceOp ( op)
static

Definition at line 2292 of file TosaOps.cpp.

References mlir::TensorType::getShape(), and mlir::TensorType::hasRank().

◆ verifyRescaleValueAndZpTypes()

static LogicalResult verifyRescaleValueAndZpTypes ( Operation op,
Value  val,
Value  valZp,
StringRef  name 
)
static

◆ verifySameElementTypes()

template<typename T >
static LogicalResult verifySameElementTypes ( op,
Type  inType,
Type  outType 
)
static

Definition at line 443 of file TosaOps.cpp.

◆ verifyZeroPoint() [1/2]

template<typename T >
static LogicalResult verifyZeroPoint ( op,
Value  val,
const int64_t &  zp,
const std::string &  operand 
)
static

Definition at line 1828 of file TosaOps.cpp.

References mlir::getElementTypeOrSelf(), and mlir::Type::isInteger().

◆ verifyZeroPoint() [2/2]

static LogicalResult verifyZeroPoint ( tosa::RescaleOp  op,
Value  zpVal,
const int64_t &  zp,
const std::string &  operand 
)
static

Definition at line 1843 of file TosaOps.cpp.

References mlir::getElementTypeOrSelf(), and mlir::Type::isInteger().