From af5e64df728f498ea9c6d43432debdb1be775251 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Wed, 15 Jun 2022 17:31:58 -0400 Subject: [PATCH] [InstCombine] add tests for (pow2 >> X) >u C; NFC --- llvm/test/Transforms/InstCombine/icmp-shr.ll | 79 ++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/llvm/test/Transforms/InstCombine/icmp-shr.ll b/llvm/test/Transforms/InstCombine/icmp-shr.ll index a6dcf136e233..2d78916356ab 100644 --- a/llvm/test/Transforms/InstCombine/icmp-shr.ll +++ b/llvm/test/Transforms/InstCombine/icmp-shr.ll @@ -1006,4 +1006,83 @@ define i1 @ashr_exact_ne_0_multiuse(i8 %x) { ret i1 %c } +define i1 @lshr_pow2_ugt(i8 %x) { +; CHECK-LABEL: @lshr_pow2_ugt( +; CHECK-NEXT: [[S:%.*]] = lshr i8 2, [[X:%.*]] +; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[S]], 1 +; CHECK-NEXT: ret i1 [[R]] +; + %s = lshr i8 2, %x + %r = icmp ugt i8 %s, 1 + ret i1 %r +} + +define i1 @lshr_pow2_ugt_use(i8 %x) { +; CHECK-LABEL: @lshr_pow2_ugt_use( +; CHECK-NEXT: [[S:%.*]] = lshr i8 -128, [[X:%.*]] +; CHECK-NEXT: call void @use(i8 [[S]]) +; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[S]], 5 +; CHECK-NEXT: ret i1 [[R]] +; + %s = lshr i8 128, %x + call void @use(i8 %s) + %r = icmp ugt i8 %s, 5 + ret i1 %r +} + +define <2 x i1> @lshr_pow2_ugt_vec(<2 x i8> %x) { +; CHECK-LABEL: @lshr_pow2_ugt_vec( +; CHECK-NEXT: [[S:%.*]] = lshr <2 x i8> , [[X:%.*]] +; CHECK-NEXT: [[R:%.*]] = icmp ugt <2 x i8> [[S]], +; CHECK-NEXT: ret <2 x i1> [[R]] +; + %s = lshr <2 x i8> , %x + %r = icmp ugt <2 x i8> %s, + ret <2 x i1> %r +} + +define i1 @lshr_not_pow2_ugt(i8 %x) { +; CHECK-LABEL: @lshr_not_pow2_ugt( +; CHECK-NEXT: [[S:%.*]] = lshr i8 3, [[X:%.*]] +; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[S]], 1 +; CHECK-NEXT: ret i1 [[R]] +; + %s = lshr i8 3, %x + %r = icmp ugt i8 %s, 1 + ret i1 %r +} + +define i1 @lshr_pow2_ugt1(i8 %x) { +; CHECK-LABEL: @lshr_pow2_ugt1( +; CHECK-NEXT: [[S:%.*]] = lshr i8 -128, [[X:%.*]] +; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[S]], 1 +; CHECK-NEXT: ret i1 [[R]] +; + %s = lshr i8 128, %x + %r = icmp ugt i8 %s, 1 + ret i1 %r +} + +define i1 @ashr_pow2_ugt(i8 %x) { +; CHECK-LABEL: @ashr_pow2_ugt( +; CHECK-NEXT: [[S:%.*]] = ashr i8 -128, [[X:%.*]] +; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[S]], -96 +; CHECK-NEXT: ret i1 [[R]] +; + %s = ashr i8 128, %x + %r = icmp ugt i8 %s, 160 + ret i1 %r +} + +define i1 @lshr_pow2_sgt(i8 %x) { +; CHECK-LABEL: @lshr_pow2_sgt( +; CHECK-NEXT: [[S:%.*]] = lshr i8 -128, [[X:%.*]] +; CHECK-NEXT: [[R:%.*]] = icmp sgt i8 [[S]], 3 +; CHECK-NEXT: ret i1 [[R]] +; + %s = lshr i8 128, %x + %r = icmp sgt i8 %s, 3 + ret i1 %r +} + declare void @use(i8)