[llvm] [DAG] Fold logic of zero-checks to multiplication for MinSize (PR #171805)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 30 10:13:28 PST 2026


================
@@ -0,0 +1,131 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple=riscv64 -mattr=+m -enable-machine-outliner=never < %s | FileCheck %s
+
+define i1 @fold_or_eq_zero_i16(i16 zeroext %a, i16 zeroext %b) minsize {
+; CHECK-LABEL: fold_or_eq_zero_i16:
+; 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 @fold_and_ne_zero_i16(i16 zeroext %a, i16 zeroext %b) minsize {
+; CHECK-LABEL: fold_and_ne_zero_i16:
+; 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
+}
+
----------------
arsenm wrote:

Check if there are multiple uses of each compare 

https://github.com/llvm/llvm-project/pull/171805


More information about the llvm-commits mailing list