[llvm] [InstCombine] Fold select(X >s 0, 0, -X) | smax(X, 0) to abs(X) (PR #165200)
Yingwei Zheng via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 27 08:35:46 PDT 2025
================
@@ -2113,3 +2113,54 @@ define <4 x i32> @or_zext_nneg_minus_constant_splat(<4 x i8> %a) {
%or = or <4 x i32> %zext, splat (i32 -9)
ret <4 x i32> %or
}
+
+define i8 @or_positive_minus_non_positive_to_abs(i8 %a){
+; CHECK-LABEL: @or_positive_minus_non_positive_to_abs(
+; CHECK-NEXT: [[TMP2:%.*]] = call i8 @llvm.abs.i8(i8 [[TMP0:%.*]], i1 false)
+; CHECK-NEXT: ret i8 [[TMP2]]
+;
+ %b = icmp sgt i8 %a, zeroinitializer
+ %mask = sext i1 %b to i8
+ %neg = sub i8 zeroinitializer, %a
+ %mask_inv = xor i8 %mask, -1
+ %c = and i8 %neg, %mask_inv
+ %d = and i8 %a, %mask
+ %or = or i8 %c, %d
+ ret i8 %or
+}
+
+define <2 x i8> @or_select_smax_to_abs(<2 x i8> %a){
----------------
dtcxzyw wrote:
Please add a test with `select(X <s 0, -X, 0) | smax(X, 0) --> abs(X)`.
https://github.com/llvm/llvm-project/pull/165200
More information about the llvm-commits
mailing list