aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Analysis/ValueTrackingTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/Analysis/ValueTrackingTest.cpp')
-rw-r--r--llvm/unittests/Analysis/ValueTrackingTest.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/llvm/unittests/Analysis/ValueTrackingTest.cpp b/llvm/unittests/Analysis/ValueTrackingTest.cpp
index 6b10448..8ebd9b5 100644
--- a/llvm/unittests/Analysis/ValueTrackingTest.cpp
+++ b/llvm/unittests/Analysis/ValueTrackingTest.cpp
@@ -2035,6 +2035,61 @@ TEST_F(ComputeKnownFPClassTest, Constants) {
ASSERT_TRUE(ConstAggZero.SignBit);
EXPECT_FALSE(*ConstAggZero.SignBit);
}
+
+ {
+ KnownFPClass Undef =
+ computeKnownFPClass(UndefValue::get(F32), M->getDataLayout(),
+ fcAllFlags, 0, nullptr, nullptr, nullptr, nullptr);
+ EXPECT_EQ(fcAllFlags, Undef.KnownFPClasses);
+ EXPECT_FALSE(Undef.SignBit);
+ }
+
+ {
+ KnownFPClass Poison =
+ computeKnownFPClass(PoisonValue::get(F32), M->getDataLayout(),
+ fcAllFlags, 0, nullptr, nullptr, nullptr, nullptr);
+ EXPECT_EQ(fcNone, Poison.KnownFPClasses);
+ ASSERT_TRUE(Poison.SignBit);
+ EXPECT_FALSE(*Poison.SignBit);
+ }
+
+ {
+ // Assume the poison element should be 0.
+ Constant *ZeroF32 = ConstantFP::getZero(F32);
+ Constant *PoisonF32 = PoisonValue::get(F32);
+
+ KnownFPClass PartiallyPoison = computeKnownFPClass(
+ ConstantVector::get({ZeroF32, PoisonF32}), M->getDataLayout(),
+ fcAllFlags, 0, nullptr, nullptr, nullptr, nullptr);
+ EXPECT_EQ(fcPosZero, PartiallyPoison.KnownFPClasses);
+ ASSERT_TRUE(PartiallyPoison.SignBit);
+ EXPECT_FALSE(*PartiallyPoison.SignBit);
+ }
+
+ {
+ // Assume the poison element should be 1.
+ Constant *NegZeroF32 = ConstantFP::getZero(F32, true);
+ Constant *PoisonF32 = PoisonValue::get(F32);
+
+ KnownFPClass PartiallyPoison = computeKnownFPClass(
+ ConstantVector::get({NegZeroF32, PoisonF32}), M->getDataLayout(),
+ fcAllFlags, 0, nullptr, nullptr, nullptr, nullptr);
+ EXPECT_EQ(fcNegZero, PartiallyPoison.KnownFPClasses);
+ ASSERT_TRUE(PartiallyPoison.SignBit);
+ EXPECT_TRUE(*PartiallyPoison.SignBit);
+ }
+
+ {
+ // Assume the poison element should be 1.
+ Constant *NegZeroF32 = ConstantFP::getZero(F32, true);
+ Constant *PoisonF32 = PoisonValue::get(F32);
+
+ KnownFPClass PartiallyPoison = computeKnownFPClass(
+ ConstantVector::get({PoisonF32, NegZeroF32}), M->getDataLayout(),
+ fcAllFlags, 0, nullptr, nullptr, nullptr, nullptr);
+ EXPECT_EQ(fcNegZero, PartiallyPoison.KnownFPClasses);
+ EXPECT_TRUE(PartiallyPoison.SignBit);
+ }
}
TEST_F(ValueTrackingTest, isNonZeroRecurrence) {