summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Sigg <csigg@google.com>2022-01-11 13:13:17 +0100
committerChristian Sigg <csigg@google.com>2022-01-11 17:47:53 +0100
commitd345ce65ff0cf5e7cf4299d0659477ca7dbe6631 (patch)
tree1c21d30c0e32c90f9245a09f0c842a1d770b57fa
parente838949bee05b77f16dea60abdfafb07471c8b89 (diff)
downloadllvm-d345ce65ff0cf5e7cf4299d0659477ca7dbe6631.tar.gz
Mark arith.minf, arith.maxf as commutative.
Reviewed By: herhut Differential Revision: https://reviews.llvm.org/D117010
-rw-r--r--mlir/include/mlir/Dialect/Arithmetic/IR/ArithmeticOps.td4
-rw-r--r--mlir/test/Dialect/Arithmetic/canonicalize.mlir13
2 files changed, 15 insertions, 2 deletions
diff --git a/mlir/include/mlir/Dialect/Arithmetic/IR/ArithmeticOps.td b/mlir/include/mlir/Dialect/Arithmetic/IR/ArithmeticOps.td
index b57c05ab87e6..5f52e440c4da 100644
--- a/mlir/include/mlir/Dialect/Arithmetic/IR/ArithmeticOps.td
+++ b/mlir/include/mlir/Dialect/Arithmetic/IR/ArithmeticOps.td
@@ -634,7 +634,7 @@ def Arith_SubFOp : Arith_FloatBinaryOp<"subf"> {
// MaxFOp
//===----------------------------------------------------------------------===//
-def Arith_MaxFOp : Arith_FloatBinaryOp<"maxf"> {
+def Arith_MaxFOp : Arith_FloatBinaryOp<"maxf", [Commutative]> {
let summary = "floating-point maximum operation";
let description = [{
Syntax:
@@ -677,7 +677,7 @@ def Arith_MaxUIOp : Arith_IntBinaryOp<"maxui"> {
// MinFOp
//===----------------------------------------------------------------------===//
-def Arith_MinFOp : Arith_FloatBinaryOp<"minf"> {
+def Arith_MinFOp : Arith_FloatBinaryOp<"minf", [Commutative]> {
let summary = "floating-point minimum operation";
let description = [{
Syntax:
diff --git a/mlir/test/Dialect/Arithmetic/canonicalize.mlir b/mlir/test/Dialect/Arithmetic/canonicalize.mlir
index 8a17fa9d7f66..54259741b7a6 100644
--- a/mlir/test/Dialect/Arithmetic/canonicalize.mlir
+++ b/mlir/test/Dialect/Arithmetic/canonicalize.mlir
@@ -678,3 +678,16 @@ func @constant_UItoFP() -> f32 {
%res = arith.sitofp %c0 : i32 to f32
return %res : f32
}
+
+// -----
+// CHECK-LABEL: @constant_MinMax(
+func @constant_MinMax(%arg0 : f32) -> f32 {
+ // CHECK: %[[const:.+]] = arith.constant
+ // CHECK: %[[min:.+]] = arith.minf %arg0, %[[const]] : f32
+ // CHECK: %[[res:.+]] = arith.maxf %[[min]], %[[const]] : f32
+ // CHECK: return %[[res]]
+ %const = arith.constant 0.0 : f32
+ %min = arith.minf %const, %arg0 : f32
+ %res = arith.maxf %const, %min : f32
+ return %res : f32
+}