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, 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

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 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)
 
static FailureOr< tosa::VariableOp > findVariableDecl (Operation *op, StringRef symName)
 
template<typename T >
static LogicalResult verifyVariableOpErrorIf (T op, Type type, StringRef name)
 
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)
 
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="")
 

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 2636 of file TosaOps.cpp.

◆ GET_ATTRDEF_CLASSES

#define GET_ATTRDEF_CLASSES

Definition at line 3929 of file TosaOps.cpp.

◆ GET_ATTRDEF_LIST

#define GET_ATTRDEF_LIST

◆ GET_OP_CLASSES

#define GET_OP_CLASSES

Definition at line 3942 of file TosaOps.cpp.

◆ GET_OP_LIST

#define GET_OP_LIST

◆ GET_TYPEDEF_CLASSES

#define GET_TYPEDEF_CLASSES

Definition at line 3935 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:2726
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 2738 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:2620

Definition at line 2645 of file TosaOps.cpp.

◆ ZERO_POINT_HELPER

#define ZERO_POINT_HELPER (   OP,
  OPERAND_NAME,
  SIGN_EXTEND 
)
Value:
FailureOr<int64_t> tosa::OP::get##OPERAND_NAME##ZeroPoint() { \
return getZeroPoint(get##OPERAND_NAME##Zp(), SIGN_EXTEND); \
} \
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(Value val, bool signExtend)
Definition: TosaOps.cpp:2124
static LogicalResult verifyZeroPoint(T op, Value val, const int64_t &zp, const std::string &operand)
Definition: TosaOps.cpp:2152
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:423

Definition at line 2194 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 1007 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 932 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 978 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 1052 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 1092 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 1679 of file TosaOps.cpp.

◆ errorIfShapeNotSizeOne()

static LogicalResult errorIfShapeNotSizeOne ( Operation op,
Type  type 
)
inlinestatic

◆ errorIfTypeOrShapeMismatch() [1/2]

static LogicalResult errorIfTypeOrShapeMismatch ( Operation op,
Type  type1,
StringRef  name1,
Type  type2,
StringRef  name2 
)
static

◆ errorIfTypeOrShapeMismatch() [2/2]

static LogicalResult errorIfTypeOrShapeMismatch ( Operation op,
ValueRange  list1,
StringRef  name1,
ValueRange  list2,
StringRef  name2 
)
static

◆ findVariableDecl()

static FailureOr<tosa::VariableOp> findVariableDecl ( Operation op,
StringRef  symName 
)
static

◆ 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()

static FailureOr<int64_t> getZeroPoint ( Value  val,
bool  signExtend 
)
static

Definition at line 2124 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 verifyConvOpErrorIf(), and verifyPoolingOp().

◆ NAryInferReturnTypes()

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

Definition at line 2726 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 2835 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 3786 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 1110 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().

◆ verifyConvOpErrorIf()

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

Definition at line 426 of file TosaOps.cpp.

References idivCheck().

◆ verifyConvOpModes()

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

Definition at line 385 of file TosaOps.cpp.

◆ verifyDimIsPowerOfTwo()

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

Definition at line 1199 of file TosaOps.cpp.

References mlir::Operation::emitOpError().

◆ verifyPoolingOp()

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

Definition at line 733 of file TosaOps.cpp.

References idivCheck().

◆ verifyReduceOp()

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

Definition at line 2670 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 670 of file TosaOps.cpp.

◆ verifyVariableOpErrorIf()

template<typename T >
static LogicalResult verifyVariableOpErrorIf ( op,
Type  type,
StringRef  name 
)
static

Definition at line 652 of file TosaOps.cpp.

References errorIfTypeOrShapeMismatch(), and findVariableDecl().

◆ verifyZeroPoint() [1/2]

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

Definition at line 2152 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 2167 of file TosaOps.cpp.

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