[llvm] [DAGCombiner] Fold subtraction if above a constant threshold to `umin` (PR #135194)
Piotr Fusik via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 10 08:01:46 PDT 2025
================
@@ -1720,45 +1720,67 @@ define i32 @sub_if_uge_multiuse_cmp_store_i32(i32 %x, i32 %y, ptr %z) {
}
define i8 @sub_if_uge_C_i8(i8 zeroext %x) {
-; CHECK-LABEL: sub_if_uge_C_i8:
-; CHECK: # %bb.0:
-; CHECK-NEXT: sltiu a1, a0, 13
-; CHECK-NEXT: addi a1, a1, -1
-; CHECK-NEXT: andi a1, a1, -13
-; CHECK-NEXT: add a0, a0, a1
-; CHECK-NEXT: ret
+; RV32I-LABEL: sub_if_uge_C_i8:
+; RV32I: # %bb.0:
+; RV32I-NEXT: sltiu a1, a0, 13
+; RV32I-NEXT: addi a1, a1, -1
+; RV32I-NEXT: andi a1, a1, -13
+; RV32I-NEXT: add a0, a0, a1
+; RV32I-NEXT: ret
+;
+; RV32ZBB-LABEL: sub_if_uge_C_i8:
+; RV32ZBB: # %bb.0:
+; RV32ZBB-NEXT: addi a1, a0, -13
+; RV32ZBB-NEXT: zext.b a1, a1
+; RV32ZBB-NEXT: minu a0, a1, a0
+; RV32ZBB-NEXT: ret
%cmp = icmp ugt i8 %x, 12
%sub = add i8 %x, -13
%conv4 = select i1 %cmp, i8 %sub, i8 %x
ret i8 %conv4
}
define i16 @sub_if_uge_C_i16(i16 zeroext %x) {
-; CHECK-LABEL: sub_if_uge_C_i16:
-; CHECK: # %bb.0:
-; CHECK-NEXT: sltiu a1, a0, 251
-; CHECK-NEXT: addi a1, a1, -1
-; CHECK-NEXT: andi a1, a1, -251
-; CHECK-NEXT: add a0, a0, a1
-; CHECK-NEXT: ret
+; RV32I-LABEL: sub_if_uge_C_i16:
+; RV32I: # %bb.0:
+; RV32I-NEXT: sltiu a1, a0, 251
+; RV32I-NEXT: addi a1, a1, -1
+; RV32I-NEXT: andi a1, a1, -251
+; RV32I-NEXT: add a0, a0, a1
+; RV32I-NEXT: ret
+;
+; RV32ZBB-LABEL: sub_if_uge_C_i16:
+; RV32ZBB: # %bb.0:
+; RV32ZBB-NEXT: addi a1, a0, -251
+; RV32ZBB-NEXT: zext.h a1, a1
----------------
pfusik wrote:
Ditto.
https://github.com/llvm/llvm-project/pull/135194
More information about the llvm-commits
mailing list