[Mlir-commits] [mlir] [mlir][tosa] Switch zero point of negate to input variable type (PR #129758)
Tai Ly
llvmlistbot at llvm.org
Wed Mar 5 08:13:52 PST 2025
================
@@ -1190,13 +1190,36 @@ OpFoldResult tosa::ExpOp::fold(FoldAdaptor adaptor) {
}
OpFoldResult tosa::NegateOp::fold(FoldAdaptor adaptor) {
- auto input = getInput1();
// Element-wise negate(negate(x)) = x
- if (auto op = input.getDefiningOp<tosa::NegateOp>()) {
- return op.getInput1();
+ // iff all zero points are constant 0
+ auto definingOp = getInput1().getDefiningOp<tosa::NegateOp>();
+ if (!definingOp) {
+ // defining op of input1 is not a negate, cannot fold
+ return {};
}
- return {};
+ if (FailureOr<int64_t> maybeIZp = getInput1ZeroPoint();
+ failed(maybeIZp) || *maybeIZp != 0) {
+ // input1 zero point is not constant 0, cannot fold
+ return {};
+ }
+ if (FailureOr<int64_t> maybeOZp = getOutputZeroPoint();
+ failed(maybeOZp) || *maybeOZp != 0) {
+ // output zero point is not constant 0, cannot fold
+ return {};
+ }
+ if (FailureOr<int64_t> maybeIZp = definingOp.getInput1ZeroPoint();
+ failed(maybeIZp) || *maybeIZp != 0) {
+ // definingOp's input1 zero point is not constant 0, cannot fold
+ return {};
+ }
+ if (FailureOr<int64_t> maybeOZp = definingOp.getOutputZeroPoint();
+ failed(maybeOZp) || *maybeOZp != 0) {
+ // definingOp's output zero point is not constant 0, cannot fold
+ return {};
+ }
----------------
Tai78641 wrote:
I thought about that, but then decided this is not safe if zero points are not 0
because the fold result would have removed both negates and therefore no zero points at all.
Not sure if this is ok. So, safe thing is to leave it
https://github.com/llvm/llvm-project/pull/129758
More information about the Mlir-commits
mailing list