diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2023-10-05 13:10:28 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-05 13:10:28 -0700 |
commit | 7a46baa465c49db84b7b5f8fa9ab847ec1da3ce4 (patch) | |
tree | 6c2ff97fa82d55bc81036ecafd7a9123136a6f3e /llvm | |
parent | a6acf3fd49a20c570a390af2a3c84e10b9545b68 (diff) | |
download | llvm-7a46baa465c49db84b7b5f8fa9ab847ec1da3ce4.zip llvm-7a46baa465c49db84b7b5f8fa9ab847ec1da3ce4.tar.gz llvm-7a46baa465c49db84b7b5f8fa9ab847ec1da3ce4.tar.bz2 |
ValueTracking: Use fcAllFlags for unknown value (#66393)
In the failure case we return null, which callers are checking. We were
also returning an fcNone which was unused. It's more consistent to
return fcAllFlags as any possible value, such that the value is always
directly usable without checking the returned value.
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Analysis/ValueTracking.cpp | 16 | ||||
-rw-r--r-- | llvm/unittests/Analysis/ValueTrackingTest.cpp | 8 |
2 files changed, 12 insertions, 12 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index f5b1878..3af5a6d 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -4003,7 +4003,7 @@ std::pair<Value *, FPClassTest> llvm::fcmpToClassTest(FCmpInst::Predicate Pred, bool LookThroughSrc) { const APFloat *ConstRHS; if (!match(RHS, m_APFloatAllowUndef(ConstRHS))) - return {nullptr, fcNone}; + return {nullptr, fcAllFlags}; return fcmpToClassTest(Pred, F, LHS, ConstRHS, LookThroughSrc); } @@ -4025,7 +4025,7 @@ llvm::fcmpToClassTest(FCmpInst::Predicate Pred, const Function &F, Value *LHS, // TODO: Handle DAZ by expanding masks to cover subnormal cases. if (Pred != FCmpInst::FCMP_ORD && Pred != FCmpInst::FCMP_UNO && !inputDenormalIsIEEE(F, LHS->getType())) - return {nullptr, fcNone}; + return {nullptr, fcAllFlags}; switch (Pred) { case FCmpInst::FCMP_OEQ: // Match x == 0.0 @@ -4062,7 +4062,7 @@ llvm::fcmpToClassTest(FCmpInst::Predicate Pred, const Function &F, Value *LHS, break; } - return {nullptr, fcNone}; + return {nullptr, fcAllFlags}; } Value *Src = LHS; @@ -4146,7 +4146,7 @@ llvm::fcmpToClassTest(FCmpInst::Predicate Pred, const Function &F, Value *LHS, case FCmpInst::FCMP_OGE: case FCmpInst::FCMP_ULT: { if (ConstRHS->isNegative()) // TODO - return {nullptr, fcNone}; + return {nullptr, fcAllFlags}; // fcmp oge fabs(x), +inf -> fcInf // fcmp oge x, +inf -> fcPosInf @@ -4160,14 +4160,14 @@ llvm::fcmpToClassTest(FCmpInst::Predicate Pred, const Function &F, Value *LHS, case FCmpInst::FCMP_OGT: case FCmpInst::FCMP_ULE: { if (ConstRHS->isNegative()) - return {nullptr, fcNone}; + return {nullptr, fcAllFlags}; // No value is ordered and greater than infinity. Mask = fcNone; break; } default: - return {nullptr, fcNone}; + return {nullptr, fcAllFlags}; } } else if (ConstRHS->isSmallestNormalized() && !ConstRHS->isNegative()) { // Match pattern that's used in __builtin_isnormal. @@ -4196,14 +4196,14 @@ llvm::fcmpToClassTest(FCmpInst::Predicate Pred, const Function &F, Value *LHS, break; } default: - return {nullptr, fcNone}; + return {nullptr, fcAllFlags}; } } else if (ConstRHS->isNaN()) { // fcmp o__ x, nan -> false // fcmp u__ x, nan -> true Mask = fcNone; } else - return {nullptr, fcNone}; + return {nullptr, fcAllFlags}; // Invert the comparison for the unordered cases. if (FCmpInst::isUnordered(Pred)) diff --git a/llvm/unittests/Analysis/ValueTrackingTest.cpp b/llvm/unittests/Analysis/ValueTrackingTest.cpp index 4eed22d..5bd1bb3 100644 --- a/llvm/unittests/Analysis/ValueTrackingTest.cpp +++ b/llvm/unittests/Analysis/ValueTrackingTest.cpp @@ -1848,13 +1848,13 @@ TEST_F(ComputeKnownFPClassTest, FCmpToClassTest_NInf) { fcmpToClassTest(CmpInst::FCMP_OGT, *A3->getFunction(), A3->getOperand(0), A3->getOperand(1)); EXPECT_EQ(nullptr, OgtVal); - EXPECT_EQ(fcNone, OgtClass); + EXPECT_EQ(fcAllFlags, OgtClass); auto [UleVal, UleClass] = fcmpToClassTest(CmpInst::FCMP_ULE, *A4->getFunction(), A4->getOperand(0), A4->getOperand(1)); EXPECT_EQ(nullptr, UleVal); - EXPECT_EQ(fcNone, UleClass); + EXPECT_EQ(fcAllFlags, UleClass); } TEST_F(ComputeKnownFPClassTest, FCmpToClassTest_PInf) { @@ -1881,13 +1881,13 @@ TEST_F(ComputeKnownFPClassTest, FCmpToClassTest_PInf) { fcmpToClassTest(CmpInst::FCMP_OLE, *A3->getFunction(), A3->getOperand(0), A3->getOperand(1)); EXPECT_EQ(nullptr, OleVal); - EXPECT_EQ(fcNone, OleClass); + EXPECT_EQ(fcAllFlags, OleClass); auto [UgtVal, UgtClass] = fcmpToClassTest(CmpInst::FCMP_UGT, *A4->getFunction(), A4->getOperand(0), A4->getOperand(1)); EXPECT_EQ(nullptr, UgtVal); - EXPECT_EQ(fcNone, UgtClass); + EXPECT_EQ(fcAllFlags, UgtClass); } TEST_F(ComputeKnownFPClassTest, SqrtNszSignBit) { |