From 8a431874e995b3ff3c4c99a23cfed0429cc9f117 Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Sun, 21 Jul 2019 09:05:49 +0000 Subject: [PATCH] [NFC][InstCombine] Add a few extra srem-by-power-of-two tests - extra uses llvm-svn: 366652 --- llvm/test/Transforms/InstCombine/rem.ll | 37 +++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/llvm/test/Transforms/InstCombine/rem.ll b/llvm/test/Transforms/InstCombine/rem.ll index c5adeb7..ea95072 100644 --- a/llvm/test/Transforms/InstCombine/rem.ll +++ b/llvm/test/Transforms/InstCombine/rem.ll @@ -701,6 +701,43 @@ define <2 x i1> @test25_vec(<2 x i32> %A) { ret <2 x i1> %C } +define i1 @test26(i32 %A, i32 %B) { +; CHECK-LABEL: @test26( +; CHECK-NEXT: [[C:%.*]] = shl nuw i32 1, [[B:%.*]] +; CHECK-NEXT: [[D:%.*]] = srem i32 [[A:%.*]], [[C]] +; CHECK-NEXT: [[E:%.*]] = icmp ne i32 [[D]], 0 +; CHECK-NEXT: ret i1 [[E]] +; + %C = shl i32 1, %B ; not a constant + %D = srem i32 %A, %C + %E = icmp ne i32 %D, 0 + ret i1 %E +} + +define i1 @test27(i32 %A, i32* %remdst) { +; CHECK-LABEL: @test27( +; CHECK-NEXT: [[B:%.*]] = srem i32 [[A:%.*]], -2147483648 +; CHECK-NEXT: store i32 [[B]], i32* [[REMDST:%.*]], align 1 +; CHECK-NEXT: [[C:%.*]] = icmp ne i32 [[B]], 0 +; CHECK-NEXT: ret i1 [[C]] +; + %B = srem i32 %A, 2147483648 ; signbit + store i32 %B, i32* %remdst, align 1 ; extra use of rem + %C = icmp ne i32 %B, 0 + ret i1 %C +} + +define i1 @test28(i32 %A) { +; CHECK-LABEL: @test28( +; CHECK-NEXT: [[B:%.*]] = srem i32 [[A:%.*]], -2147483648 +; CHECK-NEXT: [[C:%.*]] = icmp eq i32 [[B]], 0 +; CHECK-NEXT: ret i1 [[C]] +; + %B = srem i32 %A, 2147483648 ; signbit + %C = icmp eq i32 %B, 0 ; another equality predicate + ret i1 %C +} + ; FP division-by-zero is not UB. define double @PR34870(i1 %cond, double %x, double %y) { -- 2.7.4