[Mlir-commits] [mlir] [mlir][tosa] Switch zero point of negate to input variable type (PR #129758)
Luke Hutton
llvmlistbot at llvm.org
Wed Mar 5 02:19:55 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 {};
+ }
----------------
lhutton1 wrote:
Can we also fold in the case when `input1ZeroPoint == definingOp.input1ZeroPoint && outputZeroPoint == definingOp.outputZeroPoint`?
https://github.com/llvm/llvm-project/pull/129758
More information about the Mlir-commits
mailing list