LLVM 17.0.0git
|
#include "llvm/Analysis/ValueTracking.h"
Public Member Functions | |
bool | isKnownNever (FPClassTest Mask) const |
Return true if it's known this can never be one of the mask entries. | |
bool | isUnknown () const |
bool | isKnownNeverNaN () const |
Return true if it's known this can never be a nan. | |
bool | isKnownNeverInfinity () const |
Return true if it's known this can never be an infinity. | |
bool | isKnownNeverPosInfinity () const |
Return true if it's known this can never be +infinity. | |
bool | isKnownNeverNegInfinity () const |
Return true if it's known this can never be -infinity. | |
bool | isKnownNeverSubnormal () const |
Return true if it's known this can never be a subnormal. | |
bool | isKnownNeverPosSubnormal () const |
Return true if it's known this can never be a positive subnormal. | |
bool | isKnownNeverNegSubnormal () const |
Return true if it's known this can never be a negative subnormal. | |
bool | isKnownNeverZero () const |
Return true if it's known this can never be a zero. | |
bool | isKnownNeverPosZero () const |
Return true if it's known this can never be a literal positive zero. | |
bool | isKnownNeverNegZero () const |
Return true if it's known this can never be a literal negative zero. | |
bool | isKnownNeverLogicalZero (const Function &F, Type *Ty) const |
Return true if it's know this can never be interpreted as a zero. | |
bool | isKnownNeverLogicalNegZero (const Function &F, Type *Ty) const |
Return true if it's know this can never be interpreted as a negative zero. | |
bool | isKnownNeverLogicalPosZero (const Function &F, Type *Ty) const |
Return true if it's know this can never be interpreted as a positive zero. | |
bool | cannotBeOrderedLessThanZero () const |
Return true if we can prove that the analyzed floating-point value is either NaN or never less than -0.0. | |
bool | cannotBeOrderedGreaterThanZero () const |
Return true if we can prove that the analyzed floating-point value is either NaN or never greater than -0.0. | |
KnownFPClass & | operator|= (const KnownFPClass &RHS) |
void | knownNot (FPClassTest RuleOut) |
void | fneg () |
void | fabs () |
bool | signBitIsZeroOrNaN () const |
Return true if the sign bit must be 0, ignoring the sign of nans. | |
void | signBitMustBeZero () |
Assume the sign bit is zero. | |
void | copysign (const KnownFPClass &Sign) |
void | propagateNaN (const KnownFPClass &Src, bool PreserveSign=false) |
void | resetAll () |
Public Attributes | |
FPClassTest | KnownFPClasses = fcAllFlags |
Floating-point classes the value could be one of. | |
std::optional< bool > | SignBit |
std::nullopt if the sign bit is unknown, true if the sign bit is definitely set or false if the sign bit is definitely unset. | |
Static Public Attributes | |
static constexpr FPClassTest | OrderedLessThanZeroMask |
static constexpr FPClassTest | OrderedGreaterThanZeroMask |
Definition at line 233 of file ValueTracking.h.
|
inline |
Return true if we can prove that the analyzed floating-point value is either NaN or never greater than -0.0.
NaN --> true +0 --> true -0 --> true x > +0 --> false x < -0 --> true
Definition at line 336 of file ValueTracking.h.
References isKnownNever(), and OrderedGreaterThanZeroMask.
Referenced by computeKnownFPClass().
|
inline |
Return true if we can prove that the analyzed floating-point value is either NaN or never less than -0.0.
NaN --> true +0 --> true -0 --> true
x > +0 --> true x < -0 --> false
Definition at line 325 of file ValueTracking.h.
References isKnownNever(), and OrderedLessThanZeroMask.
Referenced by computeKnownFPClass(), and computeKnownFPClassForFPTrunc().
|
inline |
Definition at line 385 of file ValueTracking.h.
References llvm::fcInf, llvm::fcNan, llvm::fcNegative, llvm::fcNormal, llvm::fcPositive, llvm::fcSubnormal, llvm::fcZero, isKnownNever(), KnownFPClasses, and SignBit.
Referenced by computeKnownFPClass().
|
inline |
Definition at line 358 of file ValueTracking.h.
References llvm::fcNegInf, llvm::fcNegNormal, llvm::fcNegSubnormal, llvm::fcNegZero, llvm::fcPosInf, llvm::fcPosNormal, llvm::fcPosSubnormal, llvm::fcPosZero, KnownFPClasses, and signBitMustBeZero().
Referenced by computeKnownFPClass().
|
inline |
Definition at line 352 of file ValueTracking.h.
References llvm::fneg(), KnownFPClasses, and SignBit.
Referenced by computeKnownFPClass().
|
inline |
Return true if it's known this can never be one of the mask entries.
Definition at line 242 of file ValueTracking.h.
References llvm::fcNone, and KnownFPClasses.
Referenced by cannotBeOrderedGreaterThanZero(), cannotBeOrderedLessThanZero(), computeKnownFPClass(), copysign(), isKnownNeverInfinity(), isKnownNeverNaN(), isKnownNeverNegInfinity(), isKnownNeverNegSubnormal(), isKnownNeverNegZero(), isKnownNeverPosInfinity(), isKnownNeverPosSubnormal(), isKnownNeverPosZero(), isKnownNeverSubnormal(), isKnownNeverZero(), and signBitIsZeroOrNaN().
|
inline |
Return true if it's known this can never be an infinity.
Definition at line 256 of file ValueTracking.h.
References llvm::fcInf, and isKnownNever().
Referenced by computeKnownFPClass(), llvm::isKnownNeverInfinity(), and llvm::isKnownNeverInfOrNaN().
Return true if it's know this can never be interpreted as a negative zero.
Definition at line 4070 of file ValueTracking.cpp.
References F, inputDenormalIsIEEEOrPosZero(), isKnownNeverNegSubnormal(), and isKnownNeverNegZero().
Referenced by computeKnownFPClass().
Return true if it's know this can never be interpreted as a positive zero.
Definition at line 4076 of file ValueTracking.cpp.
References F, llvm::Type::getFltSemantics(), llvm::Type::getScalarType(), llvm::DenormalMode::IEEE, isKnownNeverPosSubnormal(), isKnownNeverPosZero(), isKnownNeverSubnormal(), llvm_unreachable, llvm::DenormalMode::PositiveZero, and llvm::DenormalMode::PreserveSign.
Referenced by computeKnownFPClass().
Return true if it's know this can never be interpreted as a zero.
This extends isKnownNeverZero to cover the case where the assumed floating-point mode for the function interprets denormals as zero.
Definition at line 4065 of file ValueTracking.cpp.
References F, inputDenormalIsIEEE(), isKnownNeverSubnormal(), and isKnownNeverZero().
Referenced by computeKnownFPClass().
|
inline |
Return true if it's known this can never be a nan.
Definition at line 251 of file ValueTracking.h.
References llvm::fcNan, and isKnownNever().
Referenced by computeKnownFPClass(), llvm::isKnownNeverInfOrNaN(), and llvm::isKnownNeverNaN().
|
inline |
Return true if it's known this can never be -infinity.
Definition at line 266 of file ValueTracking.h.
References llvm::fcNegInf, and isKnownNever().
Referenced by computeKnownFPClass().
|
inline |
Return true if it's known this can never be a negative subnormal.
Definition at line 281 of file ValueTracking.h.
References llvm::fcNegSubnormal, and isKnownNever().
Referenced by isKnownNeverLogicalNegZero().
|
inline |
Return true if it's known this can never be a literal negative zero.
Definition at line 297 of file ValueTracking.h.
References llvm::fcNegZero, and isKnownNever().
Referenced by computeKnownFPClass(), and isKnownNeverLogicalNegZero().
|
inline |
Return true if it's known this can never be +infinity.
Definition at line 261 of file ValueTracking.h.
References llvm::fcPosInf, and isKnownNever().
Referenced by computeKnownFPClass().
|
inline |
Return true if it's known this can never be a positive subnormal.
Definition at line 276 of file ValueTracking.h.
References llvm::fcPosSubnormal, and isKnownNever().
Referenced by isKnownNeverLogicalPosZero().
|
inline |
Return true if it's known this can never be a literal positive zero.
Definition at line 292 of file ValueTracking.h.
References llvm::fcPosZero, and isKnownNever().
Referenced by computeKnownFPClass(), and isKnownNeverLogicalPosZero().
|
inline |
Return true if it's known this can never be a subnormal.
Definition at line 271 of file ValueTracking.h.
References llvm::fcSubnormal, and isKnownNever().
Referenced by computeKnownFPClass(), isKnownNeverLogicalPosZero(), and isKnownNeverLogicalZero().
|
inline |
Return true if it's known this can never be a zero.
This means a literal [+-]0, and does not include denormal inputs implicitly treated as [+-]0.
Definition at line 287 of file ValueTracking.h.
References llvm::fcZero, and isKnownNever().
Referenced by computeKnownFPClass(), and isKnownNeverLogicalZero().
|
inline |
Definition at line 246 of file ValueTracking.h.
References llvm::fcAllFlags, KnownFPClasses, and SignBit.
Referenced by computeKnownFPClass().
|
inline |
Definition at line 348 of file ValueTracking.h.
References KnownFPClasses.
Referenced by computeKnownFPClass(), computeKnownFPClassForFPTrunc(), and propagateNaN().
|
inline |
Definition at line 340 of file ValueTracking.h.
References KnownFPClasses, RHS, and SignBit.
|
inline |
Definition at line 410 of file ValueTracking.h.
References llvm::fcNan, llvm::fcSNan, knownNot(), and SignBit.
Referenced by computeKnownFPClass(), and computeKnownFPClassForFPTrunc().
|
inline |
Definition at line 419 of file ValueTracking.h.
Referenced by computeKnownFPClass().
|
inline |
Return true if the sign bit must be 0, ignoring the sign of nans.
Definition at line 375 of file ValueTracking.h.
References llvm::fcNegative, and isKnownNever().
|
inline |
Assume the sign bit is zero.
Definition at line 380 of file ValueTracking.h.
References llvm::fcNan, llvm::fcPositive, KnownFPClasses, and SignBit.
Referenced by computeKnownFPClass(), and fabs().
FPClassTest llvm::KnownFPClass::KnownFPClasses = fcAllFlags |
Floating-point classes the value could be one of.
Definition at line 235 of file ValueTracking.h.
Referenced by computeKnownFPClass(), copysign(), fabs(), fneg(), isKnownNever(), isUnknown(), knownNot(), operator|=(), and signBitMustBeZero().
|
staticconstexpr |
Definition at line 314 of file ValueTracking.h.
Referenced by cannotBeOrderedGreaterThanZero(), and computeKnownFPClass().
|
staticconstexpr |
Definition at line 312 of file ValueTracking.h.
Referenced by cannotBeOrderedLessThanZero(), computeKnownFPClass(), and computeKnownFPClassForFPTrunc().
std::optional<bool> llvm::KnownFPClass::SignBit |
std::nullopt if the sign bit is unknown, true if the sign bit is definitely set or false if the sign bit is definitely unset.
Definition at line 239 of file ValueTracking.h.
Referenced by computeKnownFPClass(), copysign(), fneg(), isUnknown(), operator|=(), propagateNaN(), and signBitMustBeZero().