@@ -2118,7 +2118,7 @@ llvm::LogicalResult tosa::ReshapeOp::verify() {
21182118// return failure if val is not a constant
21192119// set zp to -1 if val is non-zero float or val is not integer nor float
21202120// otherwise set zp to val's constant value
2121- static FailureOr<int64_t > getZeroPoint (Value val) {
2121+ static FailureOr<int64_t > getZeroPoint (Value val, bool signExtend ) {
21222122 ElementsAttr zpAttr;
21232123 if (!matchPattern (val, m_Constant (&zpAttr))) {
21242124 return failure ();
@@ -2135,7 +2135,10 @@ static FailureOr<int64_t> getZeroPoint(Value val) {
21352135 }
21362136
21372137 if (llvm::isa<IntegerType>(zpElemType)) {
2138- return zpAttr.getValues <APInt>()[0 ].getSExtValue ();
2138+ if (signExtend)
2139+ return zpAttr.getValues <APInt>()[0 ].getSExtValue ();
2140+ else
2141+ return zpAttr.getValues <APInt>()[0 ].getZExtValue ();
21392142 }
21402143
21412144 // return non-zero value to trigger error check
@@ -2186,30 +2189,30 @@ static LogicalResult verifyZeroPoint(tosa::RescaleOp op, Value zpVal,
21862189 return success ();
21872190}
21882191
2189- #define ZERO_POINT_HELPER (OP, OPERAND_NAME ) \
2192+ #define ZERO_POINT_HELPER (OP, OPERAND_NAME, SIGN_EXTEND ) \
21902193 FailureOr<int64_t > tosa::OP::get##OPERAND_NAME##ZeroPoint() { \
2191- return getZeroPoint (get##OPERAND_NAME##Zp ()); \
2194+ return getZeroPoint (get##OPERAND_NAME##Zp (), SIGN_EXTEND); \
21922195 } \
21932196 LogicalResult tosa::OP::verify##OPERAND_NAME##ZeroPoint(int64_t zp) { \
21942197 return verifyZeroPoint (*this , get##OPERAND_NAME##Zp (), zp, #OPERAND_NAME); \
21952198 }
21962199
2197- ZERO_POINT_HELPER (Conv2DOp, Input)
2198- ZERO_POINT_HELPER(Conv2DOp, Weight)
2199- ZERO_POINT_HELPER(Conv3DOp, Input)
2200- ZERO_POINT_HELPER(Conv3DOp, Weight)
2201- ZERO_POINT_HELPER(DepthwiseConv2DOp, Input)
2202- ZERO_POINT_HELPER(DepthwiseConv2DOp, Weight)
2203- ZERO_POINT_HELPER(TransposeConv2DOp, Input)
2204- ZERO_POINT_HELPER(TransposeConv2DOp, Weight)
2205- ZERO_POINT_HELPER(AvgPool2dOp, Input)
2206- ZERO_POINT_HELPER(AvgPool2dOp, Output)
2207- ZERO_POINT_HELPER(MatMulOp, A)
2208- ZERO_POINT_HELPER(MatMulOp, B)
2209- ZERO_POINT_HELPER(NegateOp, Input1)
2210- ZERO_POINT_HELPER(NegateOp, Output)
2211- ZERO_POINT_HELPER(RescaleOp, Input)
2212- ZERO_POINT_HELPER(RescaleOp, Output)
2200+ ZERO_POINT_HELPER (Conv2DOp, Input, true )
2201+ ZERO_POINT_HELPER(Conv2DOp, Weight, true )
2202+ ZERO_POINT_HELPER(Conv3DOp, Input, true )
2203+ ZERO_POINT_HELPER(Conv3DOp, Weight, true )
2204+ ZERO_POINT_HELPER(DepthwiseConv2DOp, Input, true )
2205+ ZERO_POINT_HELPER(DepthwiseConv2DOp, Weight, true )
2206+ ZERO_POINT_HELPER(TransposeConv2DOp, Input, true )
2207+ ZERO_POINT_HELPER(TransposeConv2DOp, Weight, true )
2208+ ZERO_POINT_HELPER(AvgPool2dOp, Input, true )
2209+ ZERO_POINT_HELPER(AvgPool2dOp, Output, true )
2210+ ZERO_POINT_HELPER(MatMulOp, A, true )
2211+ ZERO_POINT_HELPER(MatMulOp, B, true )
2212+ ZERO_POINT_HELPER(NegateOp, Input1, true )
2213+ ZERO_POINT_HELPER(NegateOp, Output, true )
2214+ ZERO_POINT_HELPER(RescaleOp, Input, !getInputUnsigned() )
2215+ ZERO_POINT_HELPER(RescaleOp, Output, !getOutputUnsigned() )
22132216#undef ZERO_POINT_HELPER
22142217
22152218LogicalResult tosa::TransposeOp::inferReturnTypeComponents (
0 commit comments