From: Noah Goldstein Date: Sun, 5 Mar 2023 23:22:57 +0000 (-0600) Subject: [InstCombine] Add tests for `(icmp eq/ne bitreverse(x), C)`; NFC X-Git-Tag: upstream/17.0.6~15692 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a4bb08eaf4aca1a60e8f85a502a73e73c9ec5fe0;p=platform%2Fupstream%2Fllvm.git [InstCombine] Add tests for `(icmp eq/ne bitreverse(x), C)`; NFC Differential Revision: https://reviews.llvm.org/D145338 --- diff --git a/llvm/test/Transforms/InstCombine/cmp-intrinsic.ll b/llvm/test/Transforms/InstCombine/cmp-intrinsic.ll index accbfdc..171a06e 100644 --- a/llvm/test/Transforms/InstCombine/cmp-intrinsic.ll +++ b/llvm/test/Transforms/InstCombine/cmp-intrinsic.ll @@ -13,6 +13,8 @@ declare i11 @llvm.ctpop.i11(i11) declare <2 x i32> @llvm.cttz.v2i32(<2 x i32>, i1) declare <2 x i32> @llvm.ctlz.v2i32(<2 x i32>, i1) declare <2 x i32> @llvm.ctpop.v2i32(<2 x i32>) +declare i8 @llvm.bitreverse.i8(i8) +declare <2 x i8> @llvm.bitreverse.v2i8(<2 x i8>) declare void @use6(i6) define i1 @bswap_eq_i16(i16 %x) { @@ -762,3 +764,48 @@ define i1 @trunc_negative_destbits_not_enough(i33 %x) { %cmp = icmp ult i4 %trunc, 7 ret i1 %cmp } + +define i1 @bitreverse_ne_22(i8 %x) { +; CHECK-LABEL: @bitreverse_ne_22( +; CHECK-NEXT: [[Y:%.*]] = call i8 @llvm.bitreverse.i8(i8 [[X:%.*]]) +; CHECK-NEXT: [[Z:%.*]] = icmp ne i8 [[Y]], 22 +; CHECK-NEXT: ret i1 [[Z]] +; + %y = call i8 @llvm.bitreverse.i8(i8 %x) + %z = icmp ne i8 %y, 22 + ret i1 %z +} + +define i1 @bitreverse_ult_22_fail_not_equality_pred(i8 %x) { +; CHECK-LABEL: @bitreverse_ult_22_fail_not_equality_pred( +; CHECK-NEXT: [[Y:%.*]] = call i8 @llvm.bitreverse.i8(i8 [[X:%.*]]) +; CHECK-NEXT: [[Z:%.*]] = icmp ult i8 [[Y]], 22 +; CHECK-NEXT: ret i1 [[Z]] +; + %y = call i8 @llvm.bitreverse.i8(i8 %x) + %z = icmp ult i8 %y, 22 + ret i1 %z +} + + +define <2 x i1> @bitreverse_vec_eq_2_2(<2 x i8> %x) { +; CHECK-LABEL: @bitreverse_vec_eq_2_2( +; CHECK-NEXT: [[Y:%.*]] = call <2 x i8> @llvm.bitreverse.v2i8(<2 x i8> [[X:%.*]]) +; CHECK-NEXT: [[Z:%.*]] = icmp eq <2 x i8> [[Y]], +; CHECK-NEXT: ret <2 x i1> [[Z]] +; + %y = call <2 x i8> @llvm.bitreverse.v2i8(<2 x i8> %x) + %z = icmp eq <2 x i8> %y, + ret <2 x i1> %z +} + +define <2 x i1> @bitreverse_vec_eq_1_2_todo_no_splat(<2 x i8> %x) { +; CHECK-LABEL: @bitreverse_vec_eq_1_2_todo_no_splat( +; CHECK-NEXT: [[Y:%.*]] = call <2 x i8> @llvm.bitreverse.v2i8(<2 x i8> [[X:%.*]]) +; CHECK-NEXT: [[Z:%.*]] = icmp eq <2 x i8> [[Y]], +; CHECK-NEXT: ret <2 x i1> [[Z]] +; + %y = call <2 x i8> @llvm.bitreverse.v2i8(<2 x i8> %x) + %z = icmp eq <2 x i8> %y, + ret <2 x i1> %z +}