aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Analysis/ValueTrackingTest.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2023-04-12 10:35:13 -0400
committerMatt Arsenault <arsenm2@gmail.com>2023-04-13 14:44:34 -0400
commitfc7c706e3f93fa1f700a7ded2ae797aad32d892e (patch)
treeb567e364c21535f93bbb849d7cb6c5e3afc66427 /llvm/unittests/Analysis/ValueTrackingTest.cpp
parent054cac104f917de9ed6d2226f564ea8167cdaf95 (diff)
downloadllvm-fc7c706e3f93fa1f700a7ded2ae797aad32d892e.zip
llvm-fc7c706e3f93fa1f700a7ded2ae797aad32d892e.tar.gz
llvm-fc7c706e3f93fa1f700a7ded2ae797aad32d892e.tar.bz2
ValueTracking: Add cannotBeOrderedLessThanZero to KnownFPClass
Eventually we should be able to replace the existing CannotBeOrderedLessThanZero.
Diffstat (limited to 'llvm/unittests/Analysis/ValueTrackingTest.cpp')
-rw-r--r--llvm/unittests/Analysis/ValueTrackingTest.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/llvm/unittests/Analysis/ValueTrackingTest.cpp b/llvm/unittests/Analysis/ValueTrackingTest.cpp
index 211959f..9327315 100644
--- a/llvm/unittests/Analysis/ValueTrackingTest.cpp
+++ b/llvm/unittests/Analysis/ValueTrackingTest.cpp
@@ -1616,6 +1616,59 @@ TEST_F(ComputeKnownFPClassTest, FMulNoZero) {
expectKnownFPClass(fcAllFlags, std::nullopt, A7);
}
+TEST_F(ComputeKnownFPClassTest, CannotBeOrderedLessThanZero) {
+ parseAssembly("define float @test(float %arg) {\n"
+ " %A = fmul float %arg, %arg"
+ " ret float %A\n"
+ "}\n");
+
+ Type *FPTy = Type::getDoubleTy(M->getContext());
+ const DataLayout &DL = M->getDataLayout();
+
+ EXPECT_TRUE(
+ computeKnownFPClass(ConstantFP::getZero(FPTy, /*Negative=*/false), DL)
+ .cannotBeOrderedLessThanZero());
+ EXPECT_TRUE(
+ computeKnownFPClass(ConstantFP::getZero(FPTy, /*Negative=*/true), DL)
+ .cannotBeOrderedLessThanZero());
+
+ EXPECT_TRUE(computeKnownFPClass(ConstantFP::getInfinity(FPTy, false), DL)
+ .cannotBeOrderedLessThanZero());
+ EXPECT_FALSE(computeKnownFPClass(ConstantFP::getInfinity(FPTy, true), DL)
+ .cannotBeOrderedLessThanZero());
+
+ EXPECT_TRUE(computeKnownFPClass(ConstantFP::get(FPTy, 1.0), DL)
+ .cannotBeOrderedLessThanZero());
+ EXPECT_FALSE(computeKnownFPClass(ConstantFP::get(FPTy, -1.0), DL)
+ .cannotBeOrderedLessThanZero());
+
+ EXPECT_TRUE(
+ computeKnownFPClass(
+ ConstantFP::get(FPTy, APFloat::getSmallest(FPTy->getFltSemantics(),
+ /*Negative=*/false)),
+ DL)
+ .cannotBeOrderedLessThanZero());
+ EXPECT_FALSE(
+ computeKnownFPClass(
+ ConstantFP::get(FPTy, APFloat::getSmallest(FPTy->getFltSemantics(),
+ /*Negative=*/true)),
+ DL)
+ .cannotBeOrderedLessThanZero());
+
+ EXPECT_TRUE(
+ computeKnownFPClass(ConstantFP::getQNaN(FPTy, /*Negative=*/false), DL)
+ .cannotBeOrderedLessThanZero());
+ EXPECT_TRUE(
+ computeKnownFPClass(ConstantFP::getQNaN(FPTy, /*Negative=*/true), DL)
+ .cannotBeOrderedLessThanZero());
+ EXPECT_TRUE(
+ computeKnownFPClass(ConstantFP::getSNaN(FPTy, /*Negative=*/false), DL)
+ .cannotBeOrderedLessThanZero());
+ EXPECT_TRUE(
+ computeKnownFPClass(ConstantFP::getSNaN(FPTy, /*Negative=*/true), DL)
+ .cannotBeOrderedLessThanZero());
+}
+
TEST_F(ValueTrackingTest, isNonZeroRecurrence) {
parseAssembly(R"(
define i1 @test(i8 %n, i8 %r) {