[llvm] 4b2681f - [InstCombine] add/move tests for opposite direction shifts; NFC

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 6 08:38:30 PDT 2022


Author: Sanjay Patel
Date: 2022-06-06T11:35:50-04:00
New Revision: 4b2681ffa8de49aa23c0bfd69087950bb70994b5

URL: https://github.com/llvm/llvm-project/commit/4b2681ffa8de49aa23c0bfd69087950bb70994b5
DIFF: https://github.com/llvm/llvm-project/commit/4b2681ffa8de49aa23c0bfd69087950bb70994b5.diff

LOG: [InstCombine] add/move tests for opposite direction shifts; NFC

Added: 
    

Modified: 
    llvm/test/Transforms/InstCombine/and.ll
    llvm/test/Transforms/InstCombine/shift-shift.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/and.ll b/llvm/test/Transforms/InstCombine/and.ll
index b2f43121b8059..87a469b7c722e 100644
--- a/llvm/test/Transforms/InstCombine/and.ll
+++ b/llvm/test/Transforms/InstCombine/and.ll
@@ -1635,45 +1635,6 @@ define i16 @shl_lshr_pow2_const_case1(i16 %x) {
   ret i16 %r
 }
 
-define i16 @shl_lshr_pow2_const_case2(i16 %x) {
-; CHECK-LABEL: @shl_lshr_pow2_const_case2(
-; CHECK-NEXT:    [[SHL:%.*]] = shl i16 4, [[X:%.*]]
-; CHECK-NEXT:    [[LSHR:%.*]] = lshr i16 [[SHL]], 6
-; CHECK-NEXT:    [[R:%.*]] = or i16 [[LSHR]], -9
-; CHECK-NEXT:    ret i16 [[R]]
-;
-  %shl = shl i16 4, %x
-  %lshr = lshr i16 %shl, 6
-  %r = or i16 %lshr, 65527 ; ~8
-  ret i16 %r
-}
-
-define i16 @shl_lshr_pow2_const_case3(i16 %x) {
-; CHECK-LABEL: @shl_lshr_pow2_const_case3(
-; CHECK-NEXT:    [[SHL:%.*]] = shl i16 16, [[X:%.*]]
-; CHECK-NEXT:    [[LSHR:%.*]] = lshr exact i16 [[SHL]], 3
-; CHECK-NEXT:    [[R:%.*]] = or i16 [[LSHR]], -9
-; CHECK-NEXT:    ret i16 [[R]]
-;
-  %shl = shl i16 16, %x
-  %lshr = lshr i16 %shl, 3
-  %r = or i16 %lshr, 65527 ; ~8
-  ret i16 %r
-}
-
-define i13 @shl_lshr_pow2_const_case4(i16 %x) {
-; CHECK-LABEL: @shl_lshr_pow2_const_case4(
-; CHECK-NEXT:    [[SHL:%.*]] = shl i16 16, [[X:%.*]]
-; CHECK-NEXT:    [[LSHR:%.*]] = lshr exact i16 [[SHL]], 3
-; CHECK-NEXT:    [[R:%.*]] = trunc i16 [[LSHR]] to i13
-; CHECK-NEXT:    ret i13 [[R]]
-;
-  %shl = shl i16 16, %x
-  %lshr = lshr i16 %shl, 3
-  %r = trunc i16 %lshr to i13
-  ret i13 %r
-}
-
 define i16 @shl_lshr_pow2_const_negative_oneuse(i16 %x) {
 ; CHECK-LABEL: @shl_lshr_pow2_const_negative_oneuse(
 ; CHECK-NEXT:    [[SHL:%.*]] = shl i16 4, [[X:%.*]]

diff  --git a/llvm/test/Transforms/InstCombine/shift-shift.ll b/llvm/test/Transforms/InstCombine/shift-shift.ll
index aaf10f28b4231..d7acb3a96f1a3 100644
--- a/llvm/test/Transforms/InstCombine/shift-shift.ll
+++ b/llvm/test/Transforms/InstCombine/shift-shift.ll
@@ -420,3 +420,83 @@ define i32 @shl_lshr_constants(i32 %x) {
   %r = lshr i32 %s, 3
   ret i32 %r
 }
+
+define i8 @shl_lshr_demand1(i8 %x) {
+; CHECK-LABEL: @shl_lshr_demand1(
+; CHECK-NEXT:    [[SHL:%.*]] = shl i8 40, [[X:%.*]]
+; CHECK-NEXT:    [[LSHR:%.*]] = lshr exact i8 [[SHL]], 3
+; CHECK-NEXT:    [[R:%.*]] = or i8 [[LSHR]], -32
+; CHECK-NEXT:    ret i8 [[R]]
+;
+  %shl = shl i8 40, %x ; 0b0010_1000
+  %lshr = lshr i8 %shl, 3
+  %r = or i8 %lshr, 224 ; 0b1110_0000
+  ret i8 %r
+}
+
+define i8 @shl_ashr_demand2(i8 %x) {
+; CHECK-LABEL: @shl_ashr_demand2(
+; CHECK-NEXT:    [[SHL:%.*]] = shl i8 40, [[X:%.*]]
+; CHECK-NEXT:    call void @use8(i8 [[SHL]])
+; CHECK-NEXT:    [[TMP1:%.*]] = lshr exact i8 [[SHL]], 3
+; CHECK-NEXT:    [[R:%.*]] = or i8 [[TMP1]], -32
+; CHECK-NEXT:    ret i8 [[R]]
+;
+  %shl = shl i8 40, %x ; 0b0010_1000
+  call void @use8(i8 %shl)
+  %lshr = ashr i8 %shl, 3
+  %r = or i8 %lshr, 224 ; 0b1110_0000
+  ret i8 %r
+}
+
+define i8 @shl_lshr_demand3(i8 %x) {
+; CHECK-LABEL: @shl_lshr_demand3(
+; CHECK-NEXT:    [[SHL:%.*]] = shl i8 40, [[X:%.*]]
+; CHECK-NEXT:    [[LSHR:%.*]] = lshr exact i8 [[SHL]], 3
+; CHECK-NEXT:    [[R:%.*]] = or i8 [[LSHR]], -64
+; CHECK-NEXT:    ret i8 [[R]]
+;
+  %shl = shl i8 40, %x ; 0b0010_1000
+  %lshr = lshr i8 %shl, 3
+  %r = or i8 %lshr, 192 ; 0b1100_0000
+  ret i8 %r
+}
+
+define i8 @shl_lshr_demand4(i8 %x) {
+; CHECK-LABEL: @shl_lshr_demand4(
+; CHECK-NEXT:    [[SHL:%.*]] = shl i8 44, [[X:%.*]]
+; CHECK-NEXT:    [[LSHR:%.*]] = lshr i8 [[SHL]], 3
+; CHECK-NEXT:    [[R:%.*]] = or i8 [[LSHR]], -32
+; CHECK-NEXT:    ret i8 [[R]]
+;
+  %shl = shl i8 44, %x ; 0b0010_1100
+  %lshr = lshr i8 %shl, 3
+  %r = or i8 %lshr, 224 ; 0b1110_0000
+  ret i8 %r
+}
+
+define <2 x i6> @shl_lshr_demand5(<2 x i8> %x) {
+; CHECK-LABEL: @shl_lshr_demand5(
+; CHECK-NEXT:    [[SHL:%.*]] = shl <2 x i8> <i8 -108, i8 -108>, [[X:%.*]]
+; CHECK-NEXT:    [[LSHR:%.*]] = lshr exact <2 x i8> [[SHL]], <i8 2, i8 2>
+; CHECK-NEXT:    [[R:%.*]] = trunc <2 x i8> [[LSHR]] to <2 x i6>
+; CHECK-NEXT:    ret <2 x i6> [[R]]
+;
+  %shl = shl <2 x i8> <i8 148, i8 148>, %x ; 0b1001_0100
+  %lshr = lshr <2 x i8> %shl, <i8 2, i8 2>
+  %r = trunc <2 x i8> %lshr to <2 x i6>
+  ret <2 x i6> %r
+}
+
+define i16 @shl_lshr_demand6(i16 %x) {
+; CHECK-LABEL: @shl_lshr_demand6(
+; CHECK-NEXT:    [[SHL:%.*]] = shl i16 -32624, [[X:%.*]]
+; CHECK-NEXT:    [[LSHR:%.*]] = lshr exact i16 [[SHL]], 4
+; CHECK-NEXT:    [[R:%.*]] = and i16 [[LSHR]], 4094
+; CHECK-NEXT:    ret i16 [[R]]
+;
+  %shl = shl i16 32912, %x ; 0b1000_0000_1001_0000
+  %lshr = lshr i16 %shl, 4
+  %r = and i16 %lshr, 4094 ; 0b0000_1111_1111_1110
+  ret i16 %r
+}


        


More information about the llvm-commits mailing list