[Mlir-commits] [mlir] [mlir][tosa] Convert RESCALE op multiplier and shift from attributes to inputs (PR #129720)
Luke Hutton
llvmlistbot at llvm.org
Thu Mar 6 01:54:21 PST 2025
================
@@ -2469,6 +2468,139 @@ LogicalResult TransposeConv2DOp::verify() {
return success();
}
+LogicalResult RescaleOp::verify() {
+ auto inputType = llvm::dyn_cast<ShapedType>(getInput().getType());
+ if (!inputType) {
+ emitOpError("expect shaped tensor for input, got ") << getInput().getType();
+ return failure();
+ }
+ auto inputElementType = inputType.getElementType();
+ if (auto inputQType =
+ llvm::dyn_cast<quant::QuantizedType>(inputElementType)) {
+ inputElementType = inputQType.getStorageType();
+ }
+ if (!mlir::isa<IntegerType>(inputElementType)) {
+ emitOpError("expect input to have integer element type, got ")
+ << inputElementType;
+ return failure();
+ }
+ auto outputType = llvm::dyn_cast<ShapedType>(getOutput().getType());
+ if (!outputType) {
+ emitOpError("expect shaped tensor for output, got ")
+ << getOutput().getType();
+ return failure();
+ }
+ auto outputElementType = outputType.getElementType();
+ if (auto outputQType =
+ llvm::dyn_cast<quant::QuantizedType>(outputElementType)) {
+ outputElementType = outputQType.getStorageType();
+ }
+ if (!mlir::isa<IntegerType>(outputElementType)) {
+ emitOpError("expect output to have integer element type, got ")
+ << outputElementType;
+ return failure();
+ }
+ auto input_zp = getInputZpAttr().getInt();
+ if (input_zp != 0) {
+ // only int8/uint8 and uint16 input can have non-zero input_zp
+ if (!inputElementType.isInteger(8) &&
+ !(inputElementType.isInteger(16) && getInputUnsigned())) {
+ emitOpError("expect input_zp of 0, got ") << input_zp;
+ return failure();
+ }
+ // input_zp must be either 0 or 32768 for uint16 input
+ if (inputElementType.isInteger(16) && getInputUnsigned() &&
+ input_zp != 32768) {
+ emitOpError(
+ "expect input_zp of 0 or 32768 for unsigned int16 input, got ")
+ << input_zp;
+ return failure();
+ }
+ }
+
+ auto output_zp = getOutputZpAttr().getInt();
+ if (output_zp != 0) {
+ // only int8/uint8 and uint16 output can have non-zero output_zp
+ if (!outputElementType.isInteger(8) &&
+ !(outputElementType.isInteger(16) && getOutputUnsigned())) {
+ emitOpError("expect output_zp of 0, got ") << output_zp;
+ return failure();
+ }
+ // output_zp must be either 0 or 32768 for uint16 output
+ if (outputElementType.isInteger(16) && getOutputUnsigned() &&
+ output_zp != 32768) {
+ emitOpError(
+ "expect output_zp of 0 or 32768 for unsigned int16 output, got ")
+ << output_zp;
+ return failure();
+ }
----------------
lhutton1 wrote:
Fine by me
https://github.com/llvm/llvm-project/pull/129720
More information about the Mlir-commits
mailing list