LLVM 23.0.0git
llvm::KnownFPClass Struct Reference

#include "llvm/Support/KnownFPClass.h"

Public Types

enum class  MinMaxKind {
  minimum , maximum , minimumnum , maximumnum ,
  minnum , maxnum
}

Public Member Functions

 KnownFPClass (FPClassTest Known=fcAllFlags, std::optional< bool > Sign={})
LLVM_ABI KnownFPClass (const APFloat &C)
bool operator== (KnownFPClass Other) const
bool isKnownNever (FPClassTest Mask) const
 Return true if it's known this can never be one of the mask entries.
bool isKnownAlways (FPClassTest Mask) const
bool isUnknown () const
bool isKnownNeverNaN () const
 Return true if it's known this can never be a nan.
bool isKnownAlwaysNaN () const
 Return true if it's known this must always be a nan.
bool isKnownNeverInfinity () const
 Return true if it's known this can never be an infinity.
bool isKnownNeverInfOrNaN () const
 Return true if it's known this can never be an infinity or nan.
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 negative zero.
LLVM_ABI bool isKnownNeverLogicalZero (DenormalMode Mode) const
 Return true if it's known this can never be interpreted as a zero.
LLVM_ABI bool isKnownNeverLogicalNegZero (DenormalMode Mode) const
 Return true if it's known this can never be interpreted as a negative zero.
LLVM_ABI bool isKnownNeverLogicalPosZero (DenormalMode Mode) const
 Return true if it's known 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.
bool cannotBeOrderedGreaterEqZero (DenormalMode Mode) const
 Return true if it's know this can never be a negative value or a logical 0.
KnownFPClass intersectWith (const KnownFPClass &RHS) const
KnownFPClass unionWith (const KnownFPClass &RHS) const
KnownFPClassoperator|= (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 signBitMustBeOne ()
 Assume the sign bit is one.
void copysign (const KnownFPClass &Sign)
void propagateNaN (const KnownFPClass &Src, bool PreserveSign=false)
LLVM_ABI void propagateDenormal (const KnownFPClass &Src, DenormalMode Mode)
 Propagate knowledge from a source value that could be a denormal or zero.
LLVM_ABI void propagateCanonicalizingSrc (const KnownFPClass &Src, DenormalMode Mode)
 Report known classes if Src is evaluated through a potentially canonicalizing operation.
void resetAll ()

Static Public Member Functions

static LLVM_ABI KnownFPClass minMaxLike (const KnownFPClass &LHS, const KnownFPClass &RHS, MinMaxKind Kind, DenormalMode DenormMode=DenormalMode::getDynamic())
static LLVM_ABI KnownFPClass canonicalize (const KnownFPClass &Src, DenormalMode DenormMode=DenormalMode::getDynamic())
 Apply the canonicalize intrinsic to this value.
static LLVM_ABI KnownFPClass fadd (const KnownFPClass &LHS, const KnownFPClass &RHS, DenormalMode Mode=DenormalMode::getDynamic())
 Report known values for fadd.
static LLVM_ABI KnownFPClass fadd_self (const KnownFPClass &Src, DenormalMode Mode=DenormalMode::getDynamic())
 Report known values for fadd x, x.
static LLVM_ABI KnownFPClass fmul (const KnownFPClass &LHS, const KnownFPClass &RHS, DenormalMode Mode=DenormalMode::getDynamic())
 Report known values for fmul.
static KnownFPClass square (const KnownFPClass &Src, DenormalMode Mode=DenormalMode::getDynamic())
static LLVM_ABI KnownFPClass exp (const KnownFPClass &Src)
 Report known values for exp, exp2 and exp10.
static LLVM_ABI KnownFPClass log (const KnownFPClass &Src, DenormalMode Mode=DenormalMode::getDynamic())
 Propagate known class for log/log2/log10.
static LLVM_ABI KnownFPClass sqrt (const KnownFPClass &Src, DenormalMode Mode=DenormalMode::getDynamic())
 Propagate known class for sqrt.
static LLVM_ABI KnownFPClass fpext (const KnownFPClass &KnownSrc, const fltSemantics &DstTy, const fltSemantics &SrcTy)
 Propagate known class for fpext.
static LLVM_ABI KnownFPClass roundToIntegral (const KnownFPClass &Src, bool IsTrunc, bool IsMultiUnitFPType)
 Propagate known class for rounding intrinsics (trunc, floor, ceil, rint, nearbyint, round, roundeven).

Public Attributes

FPClassTest KnownFPClasses = fcAllFlags
 Floating-point classes the value could be one of.
std::optional< boolSignBit
 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

Detailed Description

Definition at line 25 of file KnownFPClass.h.

Member Enumeration Documentation

◆ MinMaxKind

enum class llvm::KnownFPClass::MinMaxKind
strong
Enumerator
minimum 
maximum 
minimumnum 
maximumnum 
minnum 
maxnum 

Definition at line 196 of file KnownFPClass.h.

Constructor & Destructor Documentation

◆ KnownFPClass() [1/2]

◆ KnownFPClass() [2/2]

KnownFPClass::KnownFPClass ( const APFloat & C)

Definition at line 20 of file KnownFPClass.cpp.

References llvm::CallingConv::C, KnownFPClasses, and SignBit.

Member Function Documentation

◆ cannotBeOrderedGreaterEqZero()

bool llvm::KnownFPClass::cannotBeOrderedGreaterEqZero ( DenormalMode Mode) const
inline

Return true if it's know this can never be a negative value or a logical 0.

 NaN --> true

x >= -0 --> false nsub --> true if mode is ieee, false otherwise. x < -0 --> true

Definition at line 136 of file KnownFPClass.h.

References llvm::fcPositive, isKnownNever(), isKnownNeverLogicalNegZero(), and Mode.

Referenced by llvm::InstCombinerImpl::SimplifyDemandedUseFPClass().

◆ cannotBeOrderedGreaterThanZero()

bool llvm::KnownFPClass::cannotBeOrderedGreaterThanZero ( ) const
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 125 of file KnownFPClass.h.

References isKnownNever(), and OrderedGreaterThanZeroMask.

Referenced by computeKnownFPClass(), exp(), fadd(), and minMaxLike().

◆ cannotBeOrderedLessThanZero()

bool llvm::KnownFPClass::cannotBeOrderedLessThanZero ( ) const
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 114 of file KnownFPClass.h.

References isKnownNever(), and OrderedLessThanZeroMask.

Referenced by llvm::cannotBeOrderedLessThanZero(), computeKnownFPClass(), computeKnownFPClassForFPTrunc(), exp(), fadd(), log(), minMaxLike(), simplifyFCmpInst(), and sqrt().

◆ canonicalize()

◆ copysign()

◆ exp()

◆ fabs()

◆ fadd()

◆ fadd_self()

◆ fmul()

◆ fneg()

void llvm::KnownFPClass::fneg ( )
inline

◆ fpext()

◆ intersectWith()

◆ isKnownAlways()

bool llvm::KnownFPClass::isKnownAlways ( FPClassTest Mask) const
inline

◆ isKnownAlwaysNaN()

bool llvm::KnownFPClass::isKnownAlwaysNaN ( ) const
inline

Return true if it's known this must always be a nan.

Definition at line 54 of file KnownFPClass.h.

References llvm::fcNan, and isKnownAlways().

Referenced by simplifyFCmpInst().

◆ isKnownNever()

◆ isKnownNeverInfinity()

bool llvm::KnownFPClass::isKnownNeverInfinity ( ) const
inline

Return true if it's known this can never be an infinity.

Definition at line 57 of file KnownFPClass.h.

References llvm::fcInf, and isKnownNever().

Referenced by computeKnownFPClass(), fadd(), fmul(), inferFastMathValueFlagsBinOp(), llvm::isKnownNeverInfinity(), and llvm::isKnownNeverInfOrNaN().

◆ isKnownNeverInfOrNaN()

bool llvm::KnownFPClass::isKnownNeverInfOrNaN ( ) const
inline

Return true if it's known this can never be an infinity or nan.

Definition at line 60 of file KnownFPClass.h.

References llvm::fcInf, llvm::fcNan, and isKnownNever().

Referenced by computeKnownFPClass(), and llvm::InstCombinerImpl::SimplifyDemandedUseFPClass().

◆ isKnownNeverLogicalNegZero()

bool KnownFPClass::isKnownNeverLogicalNegZero ( DenormalMode Mode) const

Return true if it's known this can never be interpreted as a negative zero.

Definition at line 39 of file KnownFPClass.cpp.

References inputDenormalIsIEEEOrPosZero(), isKnownNeverNegSubnormal(), and isKnownNeverNegZero().

Referenced by cannotBeOrderedGreaterEqZero(), computeKnownFPClass(), fadd(), and sqrt().

◆ isKnownNeverLogicalPosZero()

bool KnownFPClass::isKnownNeverLogicalPosZero ( DenormalMode Mode) const

Return true if it's known this can never be interpreted as a positive zero.

Definition at line 44 of file KnownFPClass.cpp.

References llvm::DenormalMode::IEEE, isKnownNeverPosSubnormal(), isKnownNeverPosZero(), isKnownNeverSubnormal(), llvm_unreachable, llvm::DenormalMode::PositiveZero, and llvm::DenormalMode::PreserveSign.

Referenced by computeKnownFPClass(), and fadd_self().

◆ isKnownNeverLogicalZero()

bool KnownFPClass::isKnownNeverLogicalZero ( DenormalMode Mode) const

Return true if it's known 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 34 of file KnownFPClass.cpp.

References inputDenormalIsIEEE(), isKnownNeverSubnormal(), and isKnownNeverZero().

Referenced by computeKnownFPClass(), fmul(), log(), and llvm::InstCombinerImpl::SimplifyDemandedUseFPClass().

◆ isKnownNeverNaN()

bool llvm::KnownFPClass::isKnownNeverNaN ( ) const
inline

◆ isKnownNeverNegInfinity()

bool llvm::KnownFPClass::isKnownNeverNegInfinity ( ) const
inline

Return true if it's known this can never be -infinity.

Definition at line 66 of file KnownFPClass.h.

References llvm::fcNegInf, and isKnownNever().

Referenced by computeKnownFPClass(), and roundToIntegral().

◆ isKnownNeverNegSubnormal()

bool llvm::KnownFPClass::isKnownNeverNegSubnormal ( ) const
inline

Return true if it's known this can never be a negative subnormal.

Definition at line 75 of file KnownFPClass.h.

References llvm::fcNegSubnormal, and isKnownNever().

Referenced by computeKnownFPClass(), and isKnownNeverLogicalNegZero().

◆ isKnownNeverNegZero()

bool llvm::KnownFPClass::isKnownNeverNegZero ( ) const
inline

Return true if it's known this can never be a negative zero.

This means a literal -0 and does not include denormal inputs implicitly treated as -0.

Definition at line 86 of file KnownFPClass.h.

References llvm::fcNegZero, and isKnownNever().

Referenced by llvm::cannotBeNegativeZero(), isKnownNeverLogicalNegZero(), and minMaxLike().

◆ isKnownNeverPosInfinity()

bool llvm::KnownFPClass::isKnownNeverPosInfinity ( ) const
inline

Return true if it's known this can never be +infinity.

Definition at line 63 of file KnownFPClass.h.

References llvm::fcPosInf, and isKnownNever().

Referenced by computeKnownFPClass(), log(), roundToIntegral(), and sqrt().

◆ isKnownNeverPosSubnormal()

bool llvm::KnownFPClass::isKnownNeverPosSubnormal ( ) const
inline

Return true if it's known this can never be a positive subnormal.

Definition at line 72 of file KnownFPClass.h.

References llvm::fcPosSubnormal, and isKnownNever().

Referenced by computeKnownFPClass(), fadd_self(), and isKnownNeverLogicalPosZero().

◆ isKnownNeverPosZero()

bool llvm::KnownFPClass::isKnownNeverPosZero ( ) const
inline

Return true if it's known this can never be a literal positive zero.

Definition at line 82 of file KnownFPClass.h.

References llvm::fcPosZero, and isKnownNever().

Referenced by isKnownNeverLogicalPosZero(), and minMaxLike().

◆ isKnownNeverSubnormal()

bool llvm::KnownFPClass::isKnownNeverSubnormal ( ) const
inline

Return true if it's known this can never be a subnormal.

Definition at line 69 of file KnownFPClass.h.

References llvm::fcSubnormal, and isKnownNever().

Referenced by computeKnownFPClass(), fadd_self(), isKnownNeverLogicalPosZero(), isKnownNeverLogicalZero(), minMaxLike(), and llvm::InstCombinerImpl::SimplifyDemandedUseFPClass().

◆ isKnownNeverZero()

bool llvm::KnownFPClass::isKnownNeverZero ( ) const
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 79 of file KnownFPClass.h.

References llvm::fcZero, and isKnownNever().

Referenced by isKnownNeverLogicalZero(), and llvm::LegalizerHelper::lowerFMinimumMaximum().

◆ isUnknown()

bool llvm::KnownFPClass::isUnknown ( ) const
inline

◆ knownNot()

◆ log()

◆ minMaxLike()

◆ operator==()

bool llvm::KnownFPClass::operator== ( KnownFPClass Other) const
inline

Definition at line 37 of file KnownFPClass.h.

References KnownFPClass(), KnownFPClasses, llvm::Other, and SignBit.

◆ operator|=()

KnownFPClass & llvm::KnownFPClass::operator|= ( const KnownFPClass & RHS)
inline

Definition at line 155 of file KnownFPClass.h.

References KnownFPClass(), KnownFPClasses, RHS, and SignBit.

◆ propagateCanonicalizingSrc()

void KnownFPClass::propagateCanonicalizingSrc ( const KnownFPClass & Src,
DenormalMode Mode )

Report known classes if Src is evaluated through a potentially canonicalizing operation.

We can assume signaling nans will not be introduced, but cannot assume a denormal will be flushed under FTZ/DAZ.

This assumes a copy-like operation and will replace any currently known information.

Definition at line 356 of file KnownFPClass.cpp.

References KnownFPClass(), propagateDenormal(), and propagateNaN().

Referenced by computeKnownFPClass().

◆ propagateDenormal()

void KnownFPClass::propagateDenormal ( const KnownFPClass & Src,
DenormalMode Mode )

Propagate knowledge from a source value that could be a denormal or zero.

We have to be conservative since output flushing is not guaranteed, so known-never-zero may not hold.

This assumes a copy-like operation and will replace any currently known information.

Definition at line 67 of file KnownFPClass.cpp.

References llvm::DenormalMode::Dynamic, llvm::fcNegZero, llvm::fcPosZero, llvm::DenormalMode::getIEEE(), llvm::DenormalMode::getPositiveZero(), KnownFPClass(), KnownFPClasses, and llvm::DenormalMode::PositiveZero.

Referenced by propagateCanonicalizingSrc().

◆ propagateNaN()

void llvm::KnownFPClass::propagateNaN ( const KnownFPClass & Src,
bool PreserveSign = false )
inline

◆ resetAll()

void llvm::KnownFPClass::resetAll ( )
inline

◆ roundToIntegral()

KnownFPClass KnownFPClass::roundToIntegral ( const KnownFPClass & Src,
bool IsTrunc,
bool IsMultiUnitFPType )
static

Propagate known class for rounding intrinsics (trunc, floor, ceil, rint, nearbyint, round, roundeven).

This is trunc if IsTrunc. IsMultiUnitFPType if this is for a multi-unit floating-point type.

Definition at line 426 of file KnownFPClass.cpp.

References llvm::fcNegFinite, llvm::fcNegInf, llvm::fcPosFinite, llvm::fcPosInf, llvm::fcSubnormal, isKnownNever(), isKnownNeverNegInfinity(), isKnownNeverPosInfinity(), KnownFPClass(), knownNot(), and propagateNaN().

Referenced by computeKnownFPClass(), and llvm::InstCombinerImpl::SimplifyDemandedUseFPClass().

◆ signBitIsZeroOrNaN()

bool llvm::KnownFPClass::signBitIsZeroOrNaN ( ) const
inline

Return true if the sign bit must be 0, ignoring the sign of nans.

Definition at line 244 of file KnownFPClass.h.

References llvm::fcNegative, and isKnownNever().

◆ signBitMustBeOne()

void llvm::KnownFPClass::signBitMustBeOne ( )
inline

Assume the sign bit is one.

Definition at line 253 of file KnownFPClass.h.

References llvm::fcNan, llvm::fcNegative, KnownFPClasses, and SignBit.

Referenced by computeKnownFPClass(), computeKnownFPClassFromCond(), fmul(), and minMaxLike().

◆ signBitMustBeZero()

void llvm::KnownFPClass::signBitMustBeZero ( )
inline

Assume the sign bit is zero.

Definition at line 247 of file KnownFPClass.h.

References llvm::fcNan, llvm::fcPositive, KnownFPClasses, and SignBit.

Referenced by computeKnownFPClass(), computeKnownFPClassFromCond(), fabs(), fmul(), and minMaxLike().

◆ sqrt()

◆ square()

◆ unionWith()

KnownFPClass llvm::KnownFPClass::unionWith ( const KnownFPClass & RHS) const
inline

Definition at line 145 of file KnownFPClass.h.

References KnownFPClass(), KnownFPClasses, RHS, and SignBit.

Referenced by llvm::adjustKnownFPClassForSelectArm().

Member Data Documentation

◆ KnownFPClasses

◆ OrderedGreaterThanZeroMask

FPClassTest llvm::KnownFPClass::OrderedGreaterThanZeroMask
staticconstexpr

◆ OrderedLessThanZeroMask

FPClassTest llvm::KnownFPClass::OrderedLessThanZeroMask
staticconstexpr

◆ SignBit

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 31 of file KnownFPClass.h.

Referenced by computeKnownFPClass(), llvm::computeKnownFPSignBit(), copysign(), fmul(), fneg(), fpext(), intersectWith(), isUnknown(), KnownFPClass(), knownNot(), minMaxLike(), operator==(), operator|=(), propagateNaN(), signBitMustBeOne(), signBitMustBeZero(), llvm::InstCombinerImpl::SimplifyDemandedUseFPClass(), simplifyFMAFMul(), and unionWith().


The documentation for this struct was generated from the following files: