[llvm] [InstCombine] Fold logic of zero-checks to multiplication for MinSize (PR #171805)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 11 04:12:46 PST 2025
================
@@ -0,0 +1,57 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple=riscv64 -mattr=+m -verify-machineinstrs < %s \
+; RUN: | FileCheck %s
+
+define i1 @foldLogicSetCCToMul0(i16 zeroext %a, i16 zeroext %b) minsize {
+; CHECK-LABEL: foldLogicSetCCToMul0:
+; CHECK: # %bb.0:
+; CHECK-NEXT: mul a0, a0, a1
+; CHECK-NEXT: seqz a0, a0
+; CHECK-NEXT: ret
+entry:
+ %cmp1 = icmp eq i16 %a, 0
+ %cmp2 = icmp eq i16 %b, 0
+ %or = or i1 %cmp1, %cmp2
+ ret i1 %or
+}
+
+define i1 @foldLogicSetCCToMul1(i16 zeroext %a, i16 zeroext %b) minsize {
+; CHECK-LABEL: foldLogicSetCCToMul1:
+; CHECK: # %bb.0:
+; CHECK-NEXT: mul a0, a0, a1
+; CHECK-NEXT: snez a0, a0
+; CHECK-NEXT: ret
+entry:
+ %cmp1 = icmp ne i16 %a, 0
+ %cmp2 = icmp ne i16 %b, 0
+ %and = and i1 %cmp1, %cmp2
+ ret i1 %and
+}
+
+define i1 @foldLogicSetCCToMul2(i64 %a, i64 %b) minsize {
+; CHECK-LABEL: foldLogicSetCCToMul2:
+; CHECK: # %bb.0:
+; CHECK-NEXT: seqz a0, a0
+; CHECK-NEXT: seqz a1, a1
+; CHECK-NEXT: or a0, a0, a1
+; CHECK-NEXT: ret
+entry:
+ %cmp1 = icmp eq i64 %a, 0
+ %cmp2 = icmp eq i64 %b, 0
+ %or = or i1 %cmp1, %cmp2
+ ret i1 %or
+}
+
+define i1 @foldLogicSetCCToMul3(i16 zeroext %a, i16 zeroext %b) {
+; CHECK-LABEL: foldLogicSetCCToMul3:
+; CHECK: # %bb.0:
+; CHECK-NEXT: seqz a0, a0
+; CHECK-NEXT: seqz a1, a1
+; CHECK-NEXT: or a0, a0, a1
+; CHECK-NEXT: ret
+entry:
+ %cmp1 = icmp eq i16 %a, 0
+ %cmp2 = icmp eq i16 %b, 0
+ %or = or i1 %cmp1, %cmp2
+ ret i1 %or
+}
----------------
arsenm wrote:
Newline at end of file error
https://github.com/llvm/llvm-project/pull/171805
More information about the llvm-commits
mailing list