From 76aa95eea9cd3193c2570f84992d8fd79d62c014 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Thu, 26 Jan 2017 20:10:55 +0000 Subject: [PATCH] [InstCombine] add tests for shift-shift folds; NFC git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293205 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Transforms/InstCombine/apint-shift.ll | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/test/Transforms/InstCombine/apint-shift.ll b/test/Transforms/InstCombine/apint-shift.ll index 699a543349f..046dd4315eb 100644 --- a/test/Transforms/InstCombine/apint-shift.ll +++ b/test/Transforms/InstCombine/apint-shift.ll @@ -429,6 +429,66 @@ define i11 @test23(i44 %A) { ret i11 %D } +; Fold lshr (shl X, C), C -> and X, C' regardless of the number of uses of the shl. + +define i44 @shl_lshr_eq_amt_multi_use(i44 %A) { +; CHECK-LABEL: @shl_lshr_eq_amt_multi_use( +; CHECK-NEXT: [[B:%.*]] = shl i44 %A, 33 +; CHECK-NEXT: [[C:%.*]] = and i44 %A, 2047 +; CHECK-NEXT: [[D:%.*]] = or i44 [[B]], [[C]] +; CHECK-NEXT: ret i44 [[D]] +; + %B = shl i44 %A, 33 + %C = lshr i44 %B, 33 + %D = add i44 %B, %C + ret i44 %D +} + +; FIXME: Fold vector lshr (shl X, C), C -> and X, C' regardless of the number of uses of the shl. + +define <2 x i44> @shl_lshr_eq_amt_multi_use_splat_vec(<2 x i44> %A) { +; CHECK-LABEL: @shl_lshr_eq_amt_multi_use_splat_vec( +; CHECK-NEXT: [[B:%.*]] = shl <2 x i44> %A, +; CHECK-NEXT: [[C:%.*]] = lshr exact <2 x i44> [[B]], +; CHECK-NEXT: [[D:%.*]] = or <2 x i44> [[B]], [[C]] +; CHECK-NEXT: ret <2 x i44> [[D]] +; + %B = shl <2 x i44> %A, + %C = lshr <2 x i44> %B, + %D = add <2 x i44> %B, %C + ret <2 x i44> %D +} + +; FIXME: Fold shl (lshr X, C), C -> and X, C' regardless of the number of uses of the lshr. + +define i43 @lshr_shl_eq_amt_multi_use(i43 %A) { +; CHECK-LABEL: @lshr_shl_eq_amt_multi_use( +; CHECK-NEXT: [[B:%.*]] = lshr i43 %A, 23 +; CHECK-NEXT: [[C:%.*]] = shl nuw i43 [[B]], 23 +; CHECK-NEXT: [[D:%.*]] = mul i43 [[B]], [[C]] +; CHECK-NEXT: ret i43 [[D]] +; + %B = lshr i43 %A, 23 + %C = shl i43 %B, 23 + %D = mul i43 %B, %C + ret i43 %D +} + +; FIXME: Fold vector shl (lshr X, C), C -> and X, C' regardless of the number of uses of the lshr. + +define <2 x i43> @lshr_shl_eq_amt_multi_use_splat_vec(<2 x i43> %A) { +; CHECK-LABEL: @lshr_shl_eq_amt_multi_use_splat_vec( +; CHECK-NEXT: [[B:%.*]] = lshr <2 x i43> %A, +; CHECK-NEXT: [[C:%.*]] = shl nuw <2 x i43> [[B]], +; CHECK-NEXT: [[D:%.*]] = mul <2 x i43> [[B]], [[C]] +; CHECK-NEXT: ret <2 x i43> [[D]] +; + %B = lshr <2 x i43> %A, + %C = shl <2 x i43> %B, + %D = mul <2 x i43> %B, %C + ret <2 x i43> %D +} + define i37 @test25(i37 %tmp.2, i37 %AA) { ; CHECK-LABEL: @test25( ; CHECK-NEXT: [[TMP_3:%.*]] = and i37 %tmp.2, -131072 -- 2.40.0