diff options
Diffstat (limited to 'llvm/unittests/Analysis/ValueTrackingTest.cpp')
-rw-r--r-- | llvm/unittests/Analysis/ValueTrackingTest.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/llvm/unittests/Analysis/ValueTrackingTest.cpp b/llvm/unittests/Analysis/ValueTrackingTest.cpp index 4b3b33b..f3240e0 100644 --- a/llvm/unittests/Analysis/ValueTrackingTest.cpp +++ b/llvm/unittests/Analysis/ValueTrackingTest.cpp @@ -748,6 +748,46 @@ TEST_F(ValueTrackingTest, impliesPoisonTest_AddNsw) { EXPECT_FALSE(impliesPoison(A2, A)); } +TEST_F(ValueTrackingTest, impliesPoisonTest_Cmp) { + parseAssembly("define void @test(i32 %x, i32 %y, i1 %c) {\n" + " %A2 = icmp eq i32 %x, %y\n" + " %A0 = icmp ult i32 %x, %y\n" + " %A = or i1 %A0, %c\n" + " ret void\n" + "}"); + EXPECT_TRUE(impliesPoison(A2, A)); +} + +TEST_F(ValueTrackingTest, impliesPoisonTest_FCmpFMF) { + parseAssembly("define void @test(float %x, float %y, i1 %c) {\n" + " %A2 = fcmp nnan oeq float %x, %y\n" + " %A0 = fcmp olt float %x, %y\n" + " %A = or i1 %A0, %c\n" + " ret void\n" + "}"); + EXPECT_FALSE(impliesPoison(A2, A)); +} + +TEST_F(ValueTrackingTest, impliesPoisonTest_AddSubSameOps) { + parseAssembly("define void @test(i32 %x, i32 %y, i1 %c) {\n" + " %A2 = add i32 %x, %y\n" + " %A = sub i32 %x, %y\n" + " ret void\n" + "}"); + EXPECT_TRUE(impliesPoison(A2, A)); +} + +TEST_F(ValueTrackingTest, impliesPoisonTest_MaskCmp) { + parseAssembly("define void @test(i32 %x, i32 %y, i1 %c) {\n" + " %M2 = and i32 %x, 7\n" + " %A2 = icmp eq i32 %M2, 1\n" + " %M = and i32 %x, 15\n" + " %A = icmp eq i32 %M, 3\n" + " ret void\n" + "}"); + EXPECT_TRUE(impliesPoison(A2, A)); +} + TEST_F(ValueTrackingTest, ComputeNumSignBits_Shuffle_Pointers) { parseAssembly( "define <2 x i32*> @test(<2 x i32*> %x) {\n" |