[Mlir-commits] [mlir] [mlir][arith] Fold min/max with absorption and redundancy (PR #160224)
Ziliang Zhang
llvmlistbot at llvm.org
Tue Sep 23 19:06:42 PDT 2025
https://github.com/ziliangzl updated https://github.com/llvm/llvm-project/pull/160224
>From e5d957e87da0b1db107525da6b6c452968f4e6e9 Mon Sep 17 00:00:00 2001
From: Ziliang Zhang <zzl.coding at gmail.com>
Date: Tue, 23 Sep 2025 11:09:38 +0800
Subject: [PATCH 1/2] [mlir][arith] Fold min/max ops using absorption law and
redundant consecutive ops
Supported folding for arith.maxsi, arith.maxui, arith.minsi, and arith.minui.
1. Fold redundant consecutive min/max operations:
max(max(a, b), b) -> max(a, b)
max(max(a, b), a) -> max(a, b)
max(a, max(a, b)) -> max(a, b)
max(b, max(a, b)) -> max(a, b)
(similar cases for min)
2. Fold using the absorption law:
max(min(a, b), a) -> a
max(min(b, a), a) -> a
max(a, min(a, b)) -> a
max(a, min(b, a)) -> a
(similar cases for min)
---
mlir/lib/Dialect/Arith/IR/ArithOps.cpp | 96 +++++++++++++++
mlir/test/Dialect/Arith/canonicalize.mlir | 137 +++++++++++++++++++++-
2 files changed, 232 insertions(+), 1 deletion(-)
diff --git a/mlir/lib/Dialect/Arith/IR/ArithOps.cpp b/mlir/lib/Dialect/Arith/IR/ArithOps.cpp
index 7cfd6d3a98df8..ea95d15b96f0c 100644
--- a/mlir/lib/Dialect/Arith/IR/ArithOps.cpp
+++ b/mlir/lib/Dialect/Arith/IR/ArithOps.cpp
@@ -1156,6 +1156,30 @@ OpFoldResult MaxSIOp::fold(FoldAdaptor adaptor) {
return getLhs();
}
+ // max(max(a, b), b) -> max(a, b)
+ // max(max(a, b), a) -> max(a, b)
+ if (auto max = getLhs().getDefiningOp<MaxSIOp>())
+ if (getRhs() == max.getRhs() || getRhs() == max.getLhs())
+ return getLhs();
+
+ // max(a, max(a, b)) -> max(a, b)
+ // max(b, max(a, b)) -> max(a, b)
+ if (auto max = getRhs().getDefiningOp<MaxSIOp>())
+ if (getLhs() == max.getRhs() || getLhs() == max.getLhs())
+ return getRhs();
+
+ // max(min(a, b), a) -> a
+ // max(min(b, a), a) -> a
+ if (auto min = getLhs().getDefiningOp<MinSIOp>())
+ if (getRhs() == min.getRhs() || getRhs() == min.getLhs())
+ return getRhs();
+
+ // max(a, min(a, b)) -> a
+ // max(a, min(b, a)) -> a
+ if (auto min = getRhs().getDefiningOp<MinSIOp>())
+ if (getLhs() == min.getRhs() || getLhs() == min.getLhs())
+ return getLhs();
+
return constFoldBinaryOp<IntegerAttr>(adaptor.getOperands(),
[](const APInt &a, const APInt &b) {
return llvm::APIntOps::smax(a, b);
@@ -1181,6 +1205,30 @@ OpFoldResult MaxUIOp::fold(FoldAdaptor adaptor) {
return getLhs();
}
+ // max(max(a, b), b) -> max(a, b)
+ // max(max(a, b), a) -> max(a, b)
+ if (auto max = getLhs().getDefiningOp<MaxUIOp>())
+ if (getRhs() == max.getRhs() || getRhs() == max.getLhs())
+ return getLhs();
+
+ // max(a, max(a, b)) -> max(a, b)
+ // max(b, max(a, b)) -> max(a, b)
+ if (auto max = getRhs().getDefiningOp<MaxUIOp>())
+ if (getLhs() == max.getRhs() || getLhs() == max.getLhs())
+ return getRhs();
+
+ // max(min(a, b), a) -> a
+ // max(min(b, a), a) -> a
+ if (auto min = getLhs().getDefiningOp<MinUIOp>())
+ if (getRhs() == min.getRhs() || getRhs() == min.getLhs())
+ return getRhs();
+
+ // max(a, min(a, b)) -> a
+ // max(a, min(b, a)) -> a
+ if (auto min = getRhs().getDefiningOp<MinUIOp>())
+ if (getLhs() == min.getRhs() || getLhs() == min.getLhs())
+ return getLhs();
+
return constFoldBinaryOp<IntegerAttr>(adaptor.getOperands(),
[](const APInt &a, const APInt &b) {
return llvm::APIntOps::umax(a, b);
@@ -1242,6 +1290,30 @@ OpFoldResult MinSIOp::fold(FoldAdaptor adaptor) {
return getLhs();
}
+ // min(min(a, b), b) -> min(a, b)
+ // min(min(a, b), a) -> min(a, b)
+ if (auto min = getLhs().getDefiningOp<MinSIOp>())
+ if (getRhs() == min.getRhs() || getRhs() == min.getLhs())
+ return getLhs();
+
+ // min(a, min(a, b)) -> min(a, b)
+ // min(b, min(a, b)) -> min(a, b)
+ if (auto min = getRhs().getDefiningOp<MinSIOp>())
+ if (getLhs() == min.getRhs() || getLhs() == min.getLhs())
+ return getRhs();
+
+ // min(max(a, b), a) -> a
+ // min(max(b, a), a) -> a
+ if (auto max = getLhs().getDefiningOp<MaxSIOp>())
+ if (getRhs() == max.getRhs() || getRhs() == max.getLhs())
+ return getRhs();
+
+ // min(a, max(a, b)) -> a
+ // min(a, max(b, a)) -> a
+ if (auto max = getRhs().getDefiningOp<MaxSIOp>())
+ if (getLhs() == max.getRhs() || getLhs() == max.getLhs())
+ return getLhs();
+
return constFoldBinaryOp<IntegerAttr>(adaptor.getOperands(),
[](const APInt &a, const APInt &b) {
return llvm::APIntOps::smin(a, b);
@@ -1267,6 +1339,30 @@ OpFoldResult MinUIOp::fold(FoldAdaptor adaptor) {
return getLhs();
}
+ // min(min(a, b), b) -> min(a, b)
+ // min(min(a, b), a) -> min(a, b)
+ if (auto min = getLhs().getDefiningOp<MinUIOp>())
+ if (getRhs() == min.getRhs() || getRhs() == min.getLhs())
+ return getLhs();
+
+ // min(a, min(a, b)) -> min(a, b)
+ // min(b, min(a, b)) -> min(a, b)
+ if (auto min = getRhs().getDefiningOp<MinUIOp>())
+ if (getLhs() == min.getRhs() || getLhs() == min.getLhs())
+ return getRhs();
+
+ // min(max(a, b), a) -> a
+ // min(max(b, a), a) -> a
+ if (auto max = getLhs().getDefiningOp<MaxUIOp>())
+ if (getRhs() == max.getRhs() || getRhs() == max.getLhs())
+ return getRhs();
+
+ // min(a, max(a, b)) -> a
+ // min(a, max(b, a)) -> a
+ if (auto max = getRhs().getDefiningOp<MaxUIOp>())
+ if (getLhs() == max.getRhs() || getLhs() == max.getLhs())
+ return getLhs();
+
return constFoldBinaryOp<IntegerAttr>(adaptor.getOperands(),
[](const APInt &a, const APInt &b) {
return llvm::APIntOps::umin(a, b);
diff --git a/mlir/test/Dialect/Arith/canonicalize.mlir b/mlir/test/Dialect/Arith/canonicalize.mlir
index ca3de3a2d7703..afa53a33e79fe 100644
--- a/mlir/test/Dialect/Arith/canonicalize.mlir
+++ b/mlir/test/Dialect/Arith/canonicalize.mlir
@@ -1984,6 +1984,40 @@ func.func @test_maxsi2(%arg0 : i8) -> (i8, i8, i8, i8) {
return %0, %1, %2, %3: i8, i8, i8, i8
}
+// CHECK-LABEL: foldMaxsiMaxsi1
+// CHECK: %[[MAXSI:.*]] = arith.maxsi %arg1, %arg0 : i32
+// CHECK: return %[[MAXSI]] : i32
+func.func public @foldMaxsiMaxsi1(%arg0: i32, %arg1: i32) -> i32 {
+ %max1 = arith.maxsi %arg1, %arg0 : i32
+ %max2 = arith.maxsi %max1, %arg1 : i32
+ func.return %max2 : i32
+}
+
+// CHECK-LABEL: foldMaxsiMaxsi2
+// CHECK: %[[MAXSI:.*]] = arith.maxsi %arg1, %arg0 : i32
+// CHECK: return %[[MAXSI]] : i32
+func.func public @foldMaxsiMaxsi2(%arg0: i32, %arg1: i32) -> i32 {
+ %max1 = arith.maxsi %arg1, %arg0 : i32
+ %max2 = arith.maxsi %arg1, %max1 : i32
+ func.return %max2 : i32
+}
+
+// CHECK-LABEL: foldMaxsiMinsi1
+// CHECK: return %arg0 : i32
+func.func public @foldMaxsiMinsi1(%arg0: i32, %arg1: i32) -> i32 {
+ %min1 = arith.minsi %arg1, %arg0 : i32
+ %max2 = arith.maxsi %min1, %arg0 : i32
+ func.return %max2 : i32
+}
+
+// CHECK-LABEL: foldMaxsiMinsi2
+// CHECK: return %arg0 : i32
+func.func public @foldMaxsiMinsi2(%arg0: i32, %arg1: i32) -> i32 {
+ %min1 = arith.minsi %arg1, %arg0 : i32
+ %max2 = arith.maxsi %arg0, %min1 : i32
+ func.return %max2 : i32
+}
+
// -----
// CHECK-LABEL: test_maxui
@@ -2018,6 +2052,40 @@ func.func @test_maxui2(%arg0 : i8) -> (i8, i8, i8, i8) {
return %0, %1, %2, %3: i8, i8, i8, i8
}
+// CHECK-LABEL: foldMaxuiMaxui1
+// CHECK: %[[MAXUI:.*]] = arith.maxui %arg1, %arg0 : i32
+// CHECK: return %[[MAXUI]] : i32
+func.func public @foldMaxuiMaxui1(%arg0: i32, %arg1: i32) -> i32 {
+ %max1 = arith.maxui %arg1, %arg0 : i32
+ %max2 = arith.maxui %max1, %arg1 : i32
+ func.return %max2 : i32
+}
+
+// CHECK-LABEL: foldMaxuiMaxui2
+// CHECK: %[[MAXUI:.*]] = arith.maxui %arg1, %arg0 : i32
+// CHECK: return %[[MAXUI]] : i32
+func.func public @foldMaxuiMaxui2(%arg0: i32, %arg1: i32) -> i32 {
+ %max1 = arith.maxui %arg1, %arg0 : i32
+ %max2 = arith.maxui %arg1, %max1 : i32
+ func.return %max2 : i32
+}
+
+// CHECK-LABEL: foldMaxuiMinui1
+// CHECK: return %arg0 : i32
+func.func public @foldMaxuiMinui1(%arg0: i32, %arg1: i32) -> i32 {
+ %min1 = arith.minui %arg1, %arg0 : i32
+ %max2 = arith.maxui %min1, %arg0 : i32
+ func.return %max2 : i32
+}
+
+// CHECK-LABEL: foldMaxuiMinui2
+// CHECK: return %arg0 : i32
+func.func public @foldMaxuiMinui2(%arg0: i32, %arg1: i32) -> i32 {
+ %min1 = arith.minui %arg1, %arg0 : i32
+ %max2 = arith.maxui %arg0, %min1 : i32
+ func.return %max2 : i32
+}
+
// -----
// CHECK-LABEL: test_minsi
@@ -2052,6 +2120,40 @@ func.func @test_minsi2(%arg0 : i8) -> (i8, i8, i8, i8) {
return %0, %1, %2, %3: i8, i8, i8, i8
}
+// CHECK-LABEL: foldMinsiMinsi1
+// CHECK: %[[MINSI:.*]] = arith.minsi %arg1, %arg0 : i32
+// CHECK: return %[[MINSI]] : i32
+func.func public @foldMinsiMinsi1(%arg0: i32, %arg1: i32) -> i32 {
+ %min1 = arith.minsi %arg1, %arg0 : i32
+ %min2 = arith.minsi %min1, %arg1 : i32
+ func.return %min2 : i32
+}
+
+// CHECK-LABEL: foldMinsiMinsi2
+// CHECK: %[[MINSI:.*]] = arith.minsi %arg1, %arg0 : i32
+// CHECK: return %[[MINSI]] : i32
+func.func public @foldMinsiMinsi2(%arg0: i32, %arg1: i32) -> i32 {
+ %min1 = arith.minsi %arg1, %arg0 : i32
+ %min2 = arith.minsi %arg1, %min1 : i32
+ func.return %min2 : i32
+}
+
+// CHECK-LABEL: foldMinsiMaxsi1
+// CHECK: return %arg0 : i32
+func.func public @foldMinsiMaxsi1(%arg0: i32, %arg1: i32) -> i32 {
+ %min1 = arith.maxsi %arg1, %arg0 : i32
+ %min2 = arith.minsi %min1, %arg0 : i32
+ func.return %min2 : i32
+}
+
+// CHECK-LABEL: foldMinsiMaxsi2
+// CHECK: return %arg0 : i32
+func.func public @foldMinsiMaxsi2(%arg0: i32, %arg1: i32) -> i32 {
+ %min1 = arith.maxsi %arg1, %arg0 : i32
+ %min2 = arith.minsi %arg0, %min1 : i32
+ func.return %min2 : i32
+}
+
// -----
// CHECK-LABEL: test_minui
@@ -2086,6 +2188,40 @@ func.func @test_minui2(%arg0 : i8) -> (i8, i8, i8, i8) {
return %0, %1, %2, %3: i8, i8, i8, i8
}
+// CHECK-LABEL: foldMinuiMinui1
+// CHECK: %[[MINUI:.*]] = arith.minui %arg1, %arg0 : i32
+// CHECK: return %[[MINUI]] : i32
+func.func public @foldMinuiMinui1(%arg0: i32, %arg1: i32) -> i32 {
+ %min1 = arith.minui %arg1, %arg0 : i32
+ %min2 = arith.minui %min1, %arg1 : i32
+ func.return %min2 : i32
+}
+
+// CHECK-LABEL: foldMinuiMinui2
+// CHECK: %[[MINUI:.*]] = arith.minui %arg1, %arg0 : i32
+// CHECK: return %[[MINUI]] : i32
+func.func public @foldMinuiMinui2(%arg0: i32, %arg1: i32) -> i32 {
+ %min1 = arith.minui %arg1, %arg0 : i32
+ %min2 = arith.minui %arg1, %min1 : i32
+ func.return %min2 : i32
+}
+
+// CHECK-LABEL: foldMinuiMaxui1
+// CHECK: return %arg0 : i32
+func.func public @foldMinuiMaxui1(%arg0: i32, %arg1: i32) -> i32 {
+ %max1 = arith.maxui %arg1, %arg0 : i32
+ %min2 = arith.minui %max1, %arg0 : i32
+ func.return %min2 : i32
+}
+
+// CHECK-LABEL: foldMinuiMaxui2
+// CHECK: return %arg0 : i32
+func.func public @foldMinuiMaxui2(%arg0: i32, %arg1: i32) -> i32 {
+ %max1 = arith.maxui %arg1, %arg0 : i32
+ %min2 = arith.minui %arg0, %max1 : i32
+ func.return %min2 : i32
+}
+
// -----
// CHECK-LABEL: @test_minimumf(
@@ -3377,4 +3513,3 @@ func.func @unreachable() {
%add = arith.addi %add, %c1_i64 : i64
cf.br ^unreachable
}
-
>From 69df9053894c47006719ed9ea5f4b64b1ae79ea0 Mon Sep 17 00:00:00 2001
From: Ziliang Zhang <zzl.coding at gmail.com>
Date: Wed, 24 Sep 2025 10:04:07 +0800
Subject: [PATCH 2/2] remove public
---
mlir/test/Dialect/Arith/canonicalize.mlir | 32 +++++++++++------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/mlir/test/Dialect/Arith/canonicalize.mlir b/mlir/test/Dialect/Arith/canonicalize.mlir
index afa53a33e79fe..3eba98670d325 100644
--- a/mlir/test/Dialect/Arith/canonicalize.mlir
+++ b/mlir/test/Dialect/Arith/canonicalize.mlir
@@ -1987,7 +1987,7 @@ func.func @test_maxsi2(%arg0 : i8) -> (i8, i8, i8, i8) {
// CHECK-LABEL: foldMaxsiMaxsi1
// CHECK: %[[MAXSI:.*]] = arith.maxsi %arg1, %arg0 : i32
// CHECK: return %[[MAXSI]] : i32
-func.func public @foldMaxsiMaxsi1(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMaxsiMaxsi1(%arg0: i32, %arg1: i32) -> i32 {
%max1 = arith.maxsi %arg1, %arg0 : i32
%max2 = arith.maxsi %max1, %arg1 : i32
func.return %max2 : i32
@@ -1996,7 +1996,7 @@ func.func public @foldMaxsiMaxsi1(%arg0: i32, %arg1: i32) -> i32 {
// CHECK-LABEL: foldMaxsiMaxsi2
// CHECK: %[[MAXSI:.*]] = arith.maxsi %arg1, %arg0 : i32
// CHECK: return %[[MAXSI]] : i32
-func.func public @foldMaxsiMaxsi2(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMaxsiMaxsi2(%arg0: i32, %arg1: i32) -> i32 {
%max1 = arith.maxsi %arg1, %arg0 : i32
%max2 = arith.maxsi %arg1, %max1 : i32
func.return %max2 : i32
@@ -2004,7 +2004,7 @@ func.func public @foldMaxsiMaxsi2(%arg0: i32, %arg1: i32) -> i32 {
// CHECK-LABEL: foldMaxsiMinsi1
// CHECK: return %arg0 : i32
-func.func public @foldMaxsiMinsi1(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMaxsiMinsi1(%arg0: i32, %arg1: i32) -> i32 {
%min1 = arith.minsi %arg1, %arg0 : i32
%max2 = arith.maxsi %min1, %arg0 : i32
func.return %max2 : i32
@@ -2012,7 +2012,7 @@ func.func public @foldMaxsiMinsi1(%arg0: i32, %arg1: i32) -> i32 {
// CHECK-LABEL: foldMaxsiMinsi2
// CHECK: return %arg0 : i32
-func.func public @foldMaxsiMinsi2(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMaxsiMinsi2(%arg0: i32, %arg1: i32) -> i32 {
%min1 = arith.minsi %arg1, %arg0 : i32
%max2 = arith.maxsi %arg0, %min1 : i32
func.return %max2 : i32
@@ -2055,7 +2055,7 @@ func.func @test_maxui2(%arg0 : i8) -> (i8, i8, i8, i8) {
// CHECK-LABEL: foldMaxuiMaxui1
// CHECK: %[[MAXUI:.*]] = arith.maxui %arg1, %arg0 : i32
// CHECK: return %[[MAXUI]] : i32
-func.func public @foldMaxuiMaxui1(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMaxuiMaxui1(%arg0: i32, %arg1: i32) -> i32 {
%max1 = arith.maxui %arg1, %arg0 : i32
%max2 = arith.maxui %max1, %arg1 : i32
func.return %max2 : i32
@@ -2064,7 +2064,7 @@ func.func public @foldMaxuiMaxui1(%arg0: i32, %arg1: i32) -> i32 {
// CHECK-LABEL: foldMaxuiMaxui2
// CHECK: %[[MAXUI:.*]] = arith.maxui %arg1, %arg0 : i32
// CHECK: return %[[MAXUI]] : i32
-func.func public @foldMaxuiMaxui2(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMaxuiMaxui2(%arg0: i32, %arg1: i32) -> i32 {
%max1 = arith.maxui %arg1, %arg0 : i32
%max2 = arith.maxui %arg1, %max1 : i32
func.return %max2 : i32
@@ -2072,7 +2072,7 @@ func.func public @foldMaxuiMaxui2(%arg0: i32, %arg1: i32) -> i32 {
// CHECK-LABEL: foldMaxuiMinui1
// CHECK: return %arg0 : i32
-func.func public @foldMaxuiMinui1(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMaxuiMinui1(%arg0: i32, %arg1: i32) -> i32 {
%min1 = arith.minui %arg1, %arg0 : i32
%max2 = arith.maxui %min1, %arg0 : i32
func.return %max2 : i32
@@ -2080,7 +2080,7 @@ func.func public @foldMaxuiMinui1(%arg0: i32, %arg1: i32) -> i32 {
// CHECK-LABEL: foldMaxuiMinui2
// CHECK: return %arg0 : i32
-func.func public @foldMaxuiMinui2(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMaxuiMinui2(%arg0: i32, %arg1: i32) -> i32 {
%min1 = arith.minui %arg1, %arg0 : i32
%max2 = arith.maxui %arg0, %min1 : i32
func.return %max2 : i32
@@ -2123,7 +2123,7 @@ func.func @test_minsi2(%arg0 : i8) -> (i8, i8, i8, i8) {
// CHECK-LABEL: foldMinsiMinsi1
// CHECK: %[[MINSI:.*]] = arith.minsi %arg1, %arg0 : i32
// CHECK: return %[[MINSI]] : i32
-func.func public @foldMinsiMinsi1(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMinsiMinsi1(%arg0: i32, %arg1: i32) -> i32 {
%min1 = arith.minsi %arg1, %arg0 : i32
%min2 = arith.minsi %min1, %arg1 : i32
func.return %min2 : i32
@@ -2132,7 +2132,7 @@ func.func public @foldMinsiMinsi1(%arg0: i32, %arg1: i32) -> i32 {
// CHECK-LABEL: foldMinsiMinsi2
// CHECK: %[[MINSI:.*]] = arith.minsi %arg1, %arg0 : i32
// CHECK: return %[[MINSI]] : i32
-func.func public @foldMinsiMinsi2(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMinsiMinsi2(%arg0: i32, %arg1: i32) -> i32 {
%min1 = arith.minsi %arg1, %arg0 : i32
%min2 = arith.minsi %arg1, %min1 : i32
func.return %min2 : i32
@@ -2140,7 +2140,7 @@ func.func public @foldMinsiMinsi2(%arg0: i32, %arg1: i32) -> i32 {
// CHECK-LABEL: foldMinsiMaxsi1
// CHECK: return %arg0 : i32
-func.func public @foldMinsiMaxsi1(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMinsiMaxsi1(%arg0: i32, %arg1: i32) -> i32 {
%min1 = arith.maxsi %arg1, %arg0 : i32
%min2 = arith.minsi %min1, %arg0 : i32
func.return %min2 : i32
@@ -2148,7 +2148,7 @@ func.func public @foldMinsiMaxsi1(%arg0: i32, %arg1: i32) -> i32 {
// CHECK-LABEL: foldMinsiMaxsi2
// CHECK: return %arg0 : i32
-func.func public @foldMinsiMaxsi2(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMinsiMaxsi2(%arg0: i32, %arg1: i32) -> i32 {
%min1 = arith.maxsi %arg1, %arg0 : i32
%min2 = arith.minsi %arg0, %min1 : i32
func.return %min2 : i32
@@ -2191,7 +2191,7 @@ func.func @test_minui2(%arg0 : i8) -> (i8, i8, i8, i8) {
// CHECK-LABEL: foldMinuiMinui1
// CHECK: %[[MINUI:.*]] = arith.minui %arg1, %arg0 : i32
// CHECK: return %[[MINUI]] : i32
-func.func public @foldMinuiMinui1(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMinuiMinui1(%arg0: i32, %arg1: i32) -> i32 {
%min1 = arith.minui %arg1, %arg0 : i32
%min2 = arith.minui %min1, %arg1 : i32
func.return %min2 : i32
@@ -2200,7 +2200,7 @@ func.func public @foldMinuiMinui1(%arg0: i32, %arg1: i32) -> i32 {
// CHECK-LABEL: foldMinuiMinui2
// CHECK: %[[MINUI:.*]] = arith.minui %arg1, %arg0 : i32
// CHECK: return %[[MINUI]] : i32
-func.func public @foldMinuiMinui2(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMinuiMinui2(%arg0: i32, %arg1: i32) -> i32 {
%min1 = arith.minui %arg1, %arg0 : i32
%min2 = arith.minui %arg1, %min1 : i32
func.return %min2 : i32
@@ -2208,7 +2208,7 @@ func.func public @foldMinuiMinui2(%arg0: i32, %arg1: i32) -> i32 {
// CHECK-LABEL: foldMinuiMaxui1
// CHECK: return %arg0 : i32
-func.func public @foldMinuiMaxui1(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMinuiMaxui1(%arg0: i32, %arg1: i32) -> i32 {
%max1 = arith.maxui %arg1, %arg0 : i32
%min2 = arith.minui %max1, %arg0 : i32
func.return %min2 : i32
@@ -2216,7 +2216,7 @@ func.func public @foldMinuiMaxui1(%arg0: i32, %arg1: i32) -> i32 {
// CHECK-LABEL: foldMinuiMaxui2
// CHECK: return %arg0 : i32
-func.func public @foldMinuiMaxui2(%arg0: i32, %arg1: i32) -> i32 {
+func.func @foldMinuiMaxui2(%arg0: i32, %arg1: i32) -> i32 {
%max1 = arith.maxui %arg1, %arg0 : i32
%min2 = arith.minui %arg0, %max1 : i32
func.return %min2 : i32
More information about the Mlir-commits
mailing list