From 38e3b30bd62c8c6007a6b1f9c9ee90168434b3b3 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Fri, 8 Oct 2021 13:03:19 -0400 Subject: [PATCH] [InstCombine] add tests for (iN X s>> N-1) | Y; NFC These are for a sibling fold suggested in D111410. The tests correspond to the 'and' tests added with: a35673f4cfc4 --- llvm/test/Transforms/InstCombine/or.ll | 59 ++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/llvm/test/Transforms/InstCombine/or.ll b/llvm/test/Transforms/InstCombine/or.ll index f57c1dd..b4c5719 100644 --- a/llvm/test/Transforms/InstCombine/or.ll +++ b/llvm/test/Transforms/InstCombine/or.ll @@ -1385,3 +1385,62 @@ define i32 @test5_use3(i32 %x, i32 %y) { %or1 = or i32 %xor, %neg ret i32 %or1 } + +define i8 @ashr_bitwidth_mask(i8 %x, i8 %y) { +; CHECK-LABEL: @ashr_bitwidth_mask( +; CHECK-NEXT: [[SIGN:%.*]] = ashr i8 [[X:%.*]], 7 +; CHECK-NEXT: [[R:%.*]] = or i8 [[SIGN]], [[Y:%.*]] +; CHECK-NEXT: ret i8 [[R]] +; + %sign = ashr i8 %x, 7 + %r = or i8 %sign, %y + ret i8 %r +} + +define <2 x i8> @ashr_bitwidth_mask_vec_commute(<2 x i8> %x, <2 x i8> %py) { +; CHECK-LABEL: @ashr_bitwidth_mask_vec_commute( +; CHECK-NEXT: [[Y:%.*]] = mul <2 x i8> [[PY:%.*]], +; CHECK-NEXT: [[SIGN:%.*]] = ashr <2 x i8> [[X:%.*]], +; CHECK-NEXT: [[R:%.*]] = or <2 x i8> [[Y]], [[SIGN]] +; CHECK-NEXT: ret <2 x i8> [[R]] +; + %y = mul <2 x i8> %py, ; thwart complexity-based ordering + %sign = ashr <2 x i8> %x, + %r = or <2 x i8> %y, %sign + ret <2 x i8> %r +} + +define i32 @ashr_bitwidth_mask_use(i32 %x, i32 %y) { +; CHECK-LABEL: @ashr_bitwidth_mask_use( +; CHECK-NEXT: [[SIGN:%.*]] = ashr i32 [[X:%.*]], 7 +; CHECK-NEXT: call void @use(i32 [[SIGN]]) +; CHECK-NEXT: [[R:%.*]] = or i32 [[SIGN]], [[Y:%.*]] +; CHECK-NEXT: ret i32 [[R]] +; + %sign = ashr i32 %x, 7 + call void @use(i32 %sign) + %r = or i32 %sign, %y + ret i32 %r +} + +define i8 @ashr_not_bitwidth_mask(i8 %x, i8 %y) { +; CHECK-LABEL: @ashr_not_bitwidth_mask( +; CHECK-NEXT: [[SIGN:%.*]] = ashr i8 [[X:%.*]], 6 +; CHECK-NEXT: [[R:%.*]] = or i8 [[SIGN]], [[Y:%.*]] +; CHECK-NEXT: ret i8 [[R]] +; + %sign = ashr i8 %x, 6 + %r = or i8 %sign, %y + ret i8 %r +} + +define i8 @lshr_bitwidth_mask(i8 %x, i8 %y) { +; CHECK-LABEL: @lshr_bitwidth_mask( +; CHECK-NEXT: [[SIGN:%.*]] = lshr i8 [[X:%.*]], 7 +; CHECK-NEXT: [[R:%.*]] = or i8 [[SIGN]], [[Y:%.*]] +; CHECK-NEXT: ret i8 [[R]] +; + %sign = lshr i8 %x, 7 + %r = or i8 %sign, %y + ret i8 %r +} -- 2.7.4