[llvm] [InstCombine] Optimize (select %x, op(%x), 0) to op(%x) for operations where op(0) == 0 (PR #147605)
Ryan Buchner via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 15 15:48:47 PDT 2025
================
@@ -0,0 +1,195 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -S -passes=instcombine < %s | FileCheck %s
+
+; (select (icmp x, 0, eq), 0, (umin x, y)) -> (umin x, y)
+define i64 @umin_select(i64 %a, i64 %b) {
+; CHECK-LABEL: @umin_select(
+; CHECK-NEXT: [[B_FR:%.*]] = freeze i64 [[B:%.*]]
+; CHECK-NEXT: [[UMIN:%.*]] = call i64 @llvm.umin.i64(i64 [[A:%.*]], i64 [[B_FR]])
+; CHECK-NEXT: ret i64 [[UMIN]]
+;
+ %cond = icmp eq i64 %a, 0
+ %umin = call i64 @llvm.umin.i64(i64 %a, i64 %b)
+ %select = select i1 %cond, i64 0, i64 %umin
+ ret i64 %select
+}
+
+; (select (icmp x, 0, eq), 0, (mul x, y)) -> (mul x, y)
+define i64 @mul_select(i64 %a, i64 %b) {
+; CHECK-LABEL: @mul_select(
+; CHECK-NEXT: [[B_FR:%.*]] = freeze i64 [[B:%.*]]
+; CHECK-NEXT: [[MUL:%.*]] = mul i64 [[A:%.*]], [[B_FR]]
+; CHECK-NEXT: ret i64 [[MUL]]
+;
+ %cond = icmp eq i64 %a, 0
+ %mul = mul i64 %a, %b
+ %select = select i1 %cond, i64 0, i64 %mul
+ ret i64 %select
+}
----------------
bababuck wrote:
Added test.
https://github.com/llvm/llvm-project/pull/147605
More information about the llvm-commits
mailing list