[llvm] [InstCombine] Avoid folding `select(umin(X, Y), X)` with min/max values in false arm (PR #143020)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 11 13:07:40 PDT 2025


================
@@ -5047,3 +5047,18 @@ define <2 x ptr> @select_freeze_constant_expression_vector_gep(i1 %cond, <2 x pt
   %sel = select i1 %cond, <2 x ptr> %y, <2 x ptr> %freeze
   ret <2 x ptr> %sel
 }
+
+; declare i8 @llvm.umin.i8(i8, i8)
+;
+; define i8 @no_fold_masked_min(i8 %acc, i8 %val, i8 %mask) {
+; ; CHECK-LABEL: @no_fold_masked_min(
+; ; CHECK-NEXT:  [[COND:%.*]] = icmp eq i8 [[MASK:%.*]], 0
+; ; CHECK-NEXT:  [[MASKED_VAL:%.*]] = select i1 [[COND:%.*]], i8 [[VAL:%.*]], i8 -1
+; ; CHECK-NEXT:  [[RES:%.*]] = call i8 @llvm.umin.i8(i8 [[ACC:%.*]], i8 [[MASKED_VAL:%.*]])
+; ; CHECK-NEXT:  ret i8 [[RES]]
+; ;
+;   %cond = icmp eq i8 %mask, 0
+;   %masked_val = select i1 %cond, i8 %val, i8 -1
+;   %res = call i8 @llvm.umin.i8(i8 %acc, i8 %masked_val)
+;   ret i8 %res
+; }
----------------
nikic wrote:

We'd still want the InstCombine test, but it should now have a loop with the reduction.

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


More information about the llvm-commits mailing list