[Mlir-commits] [mlir] 0e02bf6 - [mlir][Arithmetic] fold overlapping negf.

llvmlistbot at llvm.org llvmlistbot at llvm.org
Thu May 19 19:04:59 PDT 2022


Author: jacquesguan
Date: 2022-05-20T01:49:19Z
New Revision: 0e02bf635821be8deb2e8094706198838e45e968

URL: https://github.com/llvm/llvm-project/commit/0e02bf635821be8deb2e8094706198838e45e968
DIFF: https://github.com/llvm/llvm-project/commit/0e02bf635821be8deb2e8094706198838e45e968.diff

LOG: [mlir][Arithmetic] fold overlapping negf.

This patch folds negf(negf(x)) to x.

Differential Revision: https://reviews.llvm.org/D125955

Added: 
    

Modified: 
    mlir/lib/Dialect/Arithmetic/IR/ArithmeticOps.cpp
    mlir/test/Dialect/Arithmetic/canonicalize.mlir

Removed: 
    


################################################################################
diff  --git a/mlir/lib/Dialect/Arithmetic/IR/ArithmeticOps.cpp b/mlir/lib/Dialect/Arithmetic/IR/ArithmeticOps.cpp
index 8f26e66394287..7db71a636c9d7 100644
--- a/mlir/lib/Dialect/Arithmetic/IR/ArithmeticOps.cpp
+++ b/mlir/lib/Dialect/Arithmetic/IR/ArithmeticOps.cpp
@@ -549,6 +549,9 @@ void arith::XOrIOp::getCanonicalizationPatterns(
 //===----------------------------------------------------------------------===//
 
 OpFoldResult arith::NegFOp::fold(ArrayRef<Attribute> operands) {
+  /// negf(negf(x)) -> x
+  if (auto op = this->getOperand().getDefiningOp<arith::NegFOp>())
+    return op.getOperand();
   return constFoldUnaryOp<FloatAttr>(operands,
                                      [](const APFloat &a) { return -a; });
 }

diff  --git a/mlir/test/Dialect/Arithmetic/canonicalize.mlir b/mlir/test/Dialect/Arithmetic/canonicalize.mlir
index 11e20458bf60e..1a78bf7ea0161 100644
--- a/mlir/test/Dialect/Arithmetic/canonicalize.mlir
+++ b/mlir/test/Dialect/Arithmetic/canonicalize.mlir
@@ -1320,6 +1320,15 @@ func.func @test_negf() -> (f32) {
   return %0: f32
 }
 
+// CHECK-LABEL: @test_negf1(
+// CHECK-SAME: %[[arg0:.+]]:
+// CHECK: return %[[arg0]]
+func.func @test_negf1(%f : f32) -> (f32) {
+  %0 = arith.negf %f : f32
+  %1 = arith.negf %0 : f32
+  return %1: f32
+}
+
 // -----
 
 // CHECK-LABEL: @test_remui(


        


More information about the Mlir-commits mailing list