diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2023-04-12 10:35:13 -0400 |
---|---|---|
committer | Matt Arsenault <arsenm2@gmail.com> | 2023-04-13 14:44:34 -0400 |
commit | fc7c706e3f93fa1f700a7ded2ae797aad32d892e (patch) | |
tree | b567e364c21535f93bbb849d7cb6c5e3afc66427 /llvm/unittests/Analysis/ValueTrackingTest.cpp | |
parent | 054cac104f917de9ed6d2226f564ea8167cdaf95 (diff) | |
download | llvm-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.cpp | 53 |
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) { |