From a7380fb702a69fd9fde3e6ce6107ed11449aa4ff Mon Sep 17 00:00:00 2001 From: Kai Sasaki Date: Mon, 22 May 2023 14:59:58 +0900 Subject: [PATCH] [mlir][tosa] Fold consecutive tosa.abs Consecutive tosa.abs can be fold as single abs operation since the second one has no impact. Differential Revision: https://reviews.llvm.org/D150836 --- mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td | 2 ++ mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp | 10 ++++++++++ mlir/test/Dialect/Tosa/canonicalize.mlir | 10 ++++++++++ 3 files changed, 22 insertions(+) diff --git a/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td b/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td index 842ac74..f064e7a 100644 --- a/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td +++ b/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td @@ -944,6 +944,8 @@ def Tosa_AbsOp : Tosa_Op<"abs", [ let results = (outs Tosa_Tensor:$output ); + + let hasFolder = 1; } //===----------------------------------------------------------------------===// diff --git a/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp b/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp index 2477f15..289f195 100644 --- a/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp +++ b/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp @@ -1027,3 +1027,13 @@ OpFoldResult tosa::NegateOp::fold(FoldAdaptor adaptor) { return {}; } + +OpFoldResult tosa::AbsOp::fold(FoldAdaptor adaptor) { + auto input = getInput1(); + // Element-wise abs(abs(x)) = abs(x) + if (auto op = input.getDefiningOp()) { + return input; + } + + return {}; +} diff --git a/mlir/test/Dialect/Tosa/canonicalize.mlir b/mlir/test/Dialect/Tosa/canonicalize.mlir index 3379850..f7c3dbe 100644 --- a/mlir/test/Dialect/Tosa/canonicalize.mlir +++ b/mlir/test/Dialect/Tosa/canonicalize.mlir @@ -549,3 +549,13 @@ func.func @fold_negate_negate(%arg0: tensor) -> tensor { return %1 : tensor } +// ----- + +// CHECK-LABEL: @fold_abs_abs +func.func @fold_abs_abs(%arg0: tensor) -> tensor { + // CHECK: %[[ABS:.*]] = "tosa.abs"(%arg{{.*}}) : (tensor) -> tensor + // CHECK: return %[[ABS]] : tensor + %0 = "tosa.abs"(%arg0) : (tensor) -> tensor + %1 = "tosa.abs"(%0) : (tensor) -> tensor + return %1 : tensor +} -- 2.7.4