LLVM 20.0.0git
|
ConstantFP - Floating Point Values [float, double]. More...
#include "llvm/IR/Constants.h"
Public Member Functions | |
ConstantFP (const ConstantFP &)=delete | |
const APFloat & | getValueAPF () const |
const APFloat & | getValue () const |
bool | isZero () const |
Return true if the value is positive or negative zero. | |
bool | isNegative () const |
Return true if the sign bit is set. | |
bool | isInfinity () const |
Return true if the value is infinity. | |
bool | isNaN () const |
Return true if the value is a NaN. | |
bool | isExactlyValue (const APFloat &V) const |
We don't rely on operator== working on double values, as it returns true for things that are clearly not equal, like -0.0 and 0.0. | |
bool | isExactlyValue (double V) const |
Public Member Functions inherited from llvm::ConstantData | |
void | operator delete (void *Ptr) |
ConstantData (const ConstantData &)=delete | |
Public Member Functions inherited from llvm::Constant | |
void | operator= (const Constant &)=delete |
Constant (const Constant &)=delete | |
bool | isNullValue () const |
Return true if this is the value that would be returned by getNullValue. | |
bool | isOneValue () const |
Returns true if the value is one. | |
bool | isNotOneValue () const |
Return true if the value is not the one value, or, for vectors, does not contain one value elements. | |
bool | isAllOnesValue () const |
Return true if this is the value that would be returned by getAllOnesValue. | |
bool | isNegativeZeroValue () const |
Return true if the value is what would be returned by getZeroValueForNegation. | |
bool | isZeroValue () const |
Return true if the value is negative zero or null value. | |
bool | isNotMinSignedValue () const |
Return true if the value is not the smallest signed value, or, for vectors, does not contain smallest signed value elements. | |
bool | isMinSignedValue () const |
Return true if the value is the smallest signed value. | |
bool | isFiniteNonZeroFP () const |
Return true if this is a finite and non-zero floating-point scalar constant or a fixed width vector constant with all finite and non-zero elements. | |
bool | isNormalFP () const |
Return true if this is a normal (as opposed to denormal, infinity, nan, or zero) floating-point scalar constant or a vector constant with all normal elements. | |
bool | hasExactInverseFP () const |
Return true if this scalar has an exact multiplicative inverse or this vector has an exact multiplicative inverse for each element in the vector. | |
bool | isNaN () const |
Return true if this is a floating-point NaN constant or a vector floating-point constant with all NaN elements. | |
bool | isElementWiseEqual (Value *Y) const |
Return true if this constant and a constant 'Y' are element-wise equal. | |
bool | containsUndefOrPoisonElement () const |
Return true if this is a vector constant that includes any undef or poison elements. | |
bool | containsPoisonElement () const |
Return true if this is a vector constant that includes any poison elements. | |
bool | containsUndefElement () const |
Return true if this is a vector constant that includes any strictly undef (not poison) elements. | |
bool | containsConstantExpression () const |
Return true if this is a fixed width vector constant that includes any constant expressions. | |
bool | isThreadDependent () const |
Return true if the value can vary between threads. | |
bool | isDLLImportDependent () const |
Return true if the value is dependent on a dllimport variable. | |
bool | isConstantUsed () const |
Return true if the constant has users other than constant expressions and other dangling things. | |
bool | needsRelocation () const |
This method classifies the entry according to whether or not it may generate a relocation entry (either static or dynamic). | |
bool | needsDynamicRelocation () const |
Constant * | getAggregateElement (unsigned Elt) const |
For aggregates (struct/array/vector) return the constant that corresponds to the specified element if possible, or null if not. | |
Constant * | getAggregateElement (Constant *Elt) const |
Constant * | getSplatValue (bool AllowPoison=false) const |
If all elements of the vector constant have the same value, return that value. | |
const APInt & | getUniqueInteger () const |
If C is a constant integer then return its value, otherwise C must be a vector of constant integers, all equal, and the common value is returned. | |
ConstantRange | toConstantRange () const |
Convert constant to an approximate constant range. | |
void | destroyConstant () |
Called if some element of this constant is no longer valid. | |
void | handleOperandChange (Value *, Value *) |
This method is a special form of User::replaceUsesOfWith (which does not work on constants) that does work on constants. | |
void | removeDeadConstantUsers () const |
If there are any dead constant users dangling off of this constant, remove them. | |
bool | hasOneLiveUse () const |
Return true if the constant has exactly one live use. | |
bool | hasZeroLiveUses () const |
Return true if the constant has no live uses. | |
const Constant * | stripPointerCasts () const |
Constant * | stripPointerCasts () |
bool | isManifestConstant () const |
Return true if a constant is ConstantData or a ConstantAggregate or ConstantExpr that contain only ConstantData. | |
Public Member Functions inherited from llvm::User | |
User (const User &)=delete | |
void | operator delete (void *Usr) |
Free memory allocated for User and Use objects. | |
void | operator delete (void *Usr, unsigned) |
Placement delete - required by std, called if the ctor throws. | |
void | operator delete (void *Usr, unsigned, unsigned) |
Placement delete - required by std, called if the ctor throws. | |
const Use * | getOperandList () const |
Use * | getOperandList () |
Value * | getOperand (unsigned i) const |
void | setOperand (unsigned i, Value *Val) |
const Use & | getOperandUse (unsigned i) const |
Use & | getOperandUse (unsigned i) |
unsigned | getNumOperands () const |
ArrayRef< const uint8_t > | getDescriptor () const |
Returns the descriptor co-allocated with this User instance. | |
MutableArrayRef< uint8_t > | getDescriptor () |
Returns the descriptor co-allocated with this User instance. | |
void | setGlobalVariableNumOperands (unsigned NumOps) |
Set the number of operands on a GlobalVariable. | |
void | setNumHungOffUseOperands (unsigned NumOps) |
Subclasses with hung off uses need to manage the operand count themselves. | |
bool | isDroppable () const |
A droppable user is a user for which uses can be dropped without affecting correctness and should be dropped rather than preventing a transformation from happening. | |
op_iterator | op_begin () |
const_op_iterator | op_begin () const |
op_iterator | op_end () |
const_op_iterator | op_end () const |
op_range | operands () |
const_op_range | operands () const |
value_op_iterator | value_op_begin () |
value_op_iterator | value_op_end () |
iterator_range< value_op_iterator > | operand_values () |
const_value_op_iterator | value_op_begin () const |
const_value_op_iterator | value_op_end () const |
iterator_range< const_value_op_iterator > | operand_values () const |
void | dropAllReferences () |
Drop all references to operands. | |
bool | replaceUsesOfWith (Value *From, Value *To) |
Replace uses of one Value with another. | |
Public Member Functions inherited from llvm::Value | |
Value (const Value &)=delete | |
Value & | operator= (const Value &)=delete |
void | deleteValue () |
Delete a pointer to a generic Value. | |
void | dump () const |
Support for debugging, callable in GDB: V->dump() | |
Type * | getType () const |
All values are typed, get the type of this value. | |
LLVMContext & | getContext () const |
All values hold a context through their type. | |
bool | hasName () const |
ValueName * | getValueName () const |
void | setValueName (ValueName *VN) |
StringRef | getName () const |
Return a constant reference to the value's name. | |
void | setName (const Twine &Name) |
Change the name of the value. | |
void | takeName (Value *V) |
Transfer the name from V to this value. | |
std::string | getNameOrAsOperand () const |
void | replaceAllUsesWith (Value *V) |
Change all uses of this to point to a new Value. | |
void | replaceNonMetadataUsesWith (Value *V) |
Change non-metadata uses of this to point to a new Value. | |
void | replaceUsesWithIf (Value *New, llvm::function_ref< bool(Use &U)> ShouldReplace) |
Go through the uses list for this definition and make each use point to "V" if the callback ShouldReplace returns true for the given Use. | |
void | replaceUsesOutsideBlock (Value *V, BasicBlock *BB) |
replaceUsesOutsideBlock - Go through the uses list for this definition and make each use point to "V" instead of "this" when the use is outside the block. | |
void | assertModuleIsMaterializedImpl () const |
void | assertModuleIsMaterialized () const |
bool | use_empty () const |
bool | materialized_use_empty () const |
use_iterator | materialized_use_begin () |
const_use_iterator | materialized_use_begin () const |
use_iterator | use_begin () |
const_use_iterator | use_begin () const |
use_iterator | use_end () |
const_use_iterator | use_end () const |
iterator_range< use_iterator > | materialized_uses () |
iterator_range< const_use_iterator > | materialized_uses () const |
iterator_range< use_iterator > | uses () |
iterator_range< const_use_iterator > | uses () const |
bool | user_empty () const |
user_iterator | materialized_user_begin () |
const_user_iterator | materialized_user_begin () const |
user_iterator | user_begin () |
const_user_iterator | user_begin () const |
user_iterator | user_end () |
const_user_iterator | user_end () const |
User * | user_back () |
const User * | user_back () const |
iterator_range< user_iterator > | materialized_users () |
iterator_range< const_user_iterator > | materialized_users () const |
iterator_range< user_iterator > | users () |
iterator_range< const_user_iterator > | users () const |
bool | hasOneUse () const |
Return true if there is exactly one use of this value. | |
bool | hasNUses (unsigned N) const |
Return true if this Value has exactly N uses. | |
bool | hasNUsesOrMore (unsigned N) const |
Return true if this value has N uses or more. | |
bool | hasOneUser () const |
Return true if there is exactly one user of this value. | |
Use * | getSingleUndroppableUse () |
Return true if there is exactly one use of this value that cannot be dropped. | |
const Use * | getSingleUndroppableUse () const |
User * | getUniqueUndroppableUser () |
Return true if there is exactly one unique user of this value that cannot be dropped (that user can have multiple uses of this value). | |
const User * | getUniqueUndroppableUser () const |
bool | hasNUndroppableUses (unsigned N) const |
Return true if there this value. | |
bool | hasNUndroppableUsesOrMore (unsigned N) const |
Return true if this value has N uses or more. | |
void | dropDroppableUses (llvm::function_ref< bool(const Use *)> ShouldDrop=[](const Use *) { return true;}) |
Remove every uses that can safely be removed. | |
void | dropDroppableUsesIn (User &Usr) |
Remove every use of this value in User that can safely be removed. | |
bool | isUsedInBasicBlock (const BasicBlock *BB) const |
Check if this value is used in the specified basic block. | |
unsigned | getNumUses () const |
This method computes the number of uses of this Value. | |
void | addUse (Use &U) |
This method should only be used by the Use class. | |
unsigned | getValueID () const |
Return an ID for the concrete type of this object. | |
unsigned | getRawSubclassOptionalData () const |
Return the raw optional flags value contained in this value. | |
void | clearSubclassOptionalData () |
Clear the optional flags contained in this value. | |
bool | hasSameSubclassOptionalData (const Value *V) const |
Check the optional flags for equality. | |
bool | hasValueHandle () const |
Return true if there is a value handle associated with this value. | |
bool | isUsedByMetadata () const |
Return true if there is metadata referencing this value. | |
bool | isSwiftError () const |
Return true if this value is a swifterror value. | |
const Value * | stripPointerCasts () const |
Strip off pointer casts, all-zero GEPs and address space casts. | |
Value * | stripPointerCasts () |
const Value * | stripPointerCastsAndAliases () const |
Strip off pointer casts, all-zero GEPs, address space casts, and aliases. | |
Value * | stripPointerCastsAndAliases () |
const Value * | stripPointerCastsSameRepresentation () const |
Strip off pointer casts, all-zero GEPs and address space casts but ensures the representation of the result stays the same. | |
Value * | stripPointerCastsSameRepresentation () |
const Value * | stripPointerCastsForAliasAnalysis () const |
Strip off pointer casts, all-zero GEPs, single-argument phi nodes and invariant group info. | |
Value * | stripPointerCastsForAliasAnalysis () |
const Value * | stripInBoundsConstantOffsets () const |
Strip off pointer casts and all-constant inbounds GEPs. | |
Value * | stripInBoundsConstantOffsets () |
const Value * | stripAndAccumulateConstantOffsets (const DataLayout &DL, APInt &Offset, bool AllowNonInbounds, bool AllowInvariantGroup=false, function_ref< bool(Value &Value, APInt &Offset)> ExternalAnalysis=nullptr) const |
Accumulate the constant offset this value has compared to a base pointer. | |
Value * | stripAndAccumulateConstantOffsets (const DataLayout &DL, APInt &Offset, bool AllowNonInbounds, bool AllowInvariantGroup=false) |
const Value * | stripAndAccumulateInBoundsConstantOffsets (const DataLayout &DL, APInt &Offset) const |
This is a wrapper around stripAndAccumulateConstantOffsets with the in-bounds requirement set to false. | |
Value * | stripAndAccumulateInBoundsConstantOffsets (const DataLayout &DL, APInt &Offset) |
const Value * | stripInBoundsOffsets (function_ref< void(const Value *)> Func=[](const Value *) {}) const |
Strip off pointer casts and inbounds GEPs. | |
Value * | stripInBoundsOffsets (function_ref< void(const Value *)> Func=[](const Value *) {}) |
std::optional< int64_t > | getPointerOffsetFrom (const Value *Other, const DataLayout &DL) const |
If this ptr is provably equal to Other plus a constant offset, return that offset in bytes. | |
bool | canBeFreed () const |
Return true if the memory object referred to by V can by freed in the scope for which the SSA value defining the allocation is statically defined. | |
uint64_t | getPointerDereferenceableBytes (const DataLayout &DL, bool &CanBeNull, bool &CanBeFreed) const |
Returns the number of bytes known to be dereferenceable for the pointer value. | |
Align | getPointerAlignment (const DataLayout &DL) const |
Returns an alignment of the pointer value. | |
const Value * | DoPHITranslation (const BasicBlock *CurBB, const BasicBlock *PredBB) const |
Translate PHI node to its predecessor from the given basic block. | |
Value * | DoPHITranslation (const BasicBlock *CurBB, const BasicBlock *PredBB) |
void | mutateType (Type *Ty) |
Mutate the type of this Value to be of the specified type. | |
template<class Compare > | |
void | sortUseList (Compare Cmp) |
Sort the use-list. | |
void | reverseUseList () |
Reverse the use-list. | |
void | print (raw_ostream &O, bool IsForDebug=false) const |
Implement operator<< on Value. | |
void | print (raw_ostream &O, ModuleSlotTracker &MST, bool IsForDebug=false) const |
void | printAsOperand (raw_ostream &O, bool PrintType=true, const Module *M=nullptr) const |
Print the name of this Value out to the specified raw_ostream. | |
void | printAsOperand (raw_ostream &O, bool PrintType, ModuleSlotTracker &MST) const |
Static Public Member Functions | |
static Constant * | get (Type *Ty, double V) |
This returns a ConstantFP, or a vector containing a splat of a ConstantFP, for the specified value in the specified type. | |
static Constant * | get (Type *Ty, const APFloat &V) |
If Ty is a vector type, return a Constant with a splat of the given value. | |
static Constant * | get (Type *Ty, StringRef Str) |
static ConstantFP * | get (LLVMContext &Context, const APFloat &V) |
static Constant * | getNaN (Type *Ty, bool Negative=false, uint64_t Payload=0) |
static Constant * | getQNaN (Type *Ty, bool Negative=false, APInt *Payload=nullptr) |
static Constant * | getSNaN (Type *Ty, bool Negative=false, APInt *Payload=nullptr) |
static Constant * | getZero (Type *Ty, bool Negative=false) |
static Constant * | getNegativeZero (Type *Ty) |
static Constant * | getInfinity (Type *Ty, bool Negative=false) |
static bool | isValueValidForType (Type *Ty, const APFloat &V) |
Return true if Ty is big enough to represent V. | |
static bool | classof (const Value *V) |
Methods for support type inquiry through isa, cast, and dyn_cast: | |
Static Public Member Functions inherited from llvm::ConstantData | |
static bool | classof (const Value *V) |
Methods to support type inquiry through isa, cast, and dyn_cast. | |
Static Public Member Functions inherited from llvm::Constant | |
static bool | classof (const Value *V) |
static Constant * | getNullValue (Type *Ty) |
Constructor to create a '0' constant of arbitrary type. | |
static Constant * | getAllOnesValue (Type *Ty) |
static Constant * | getIntegerValue (Type *Ty, const APInt &V) |
Return the value for an integer or pointer constant, or a vector thereof, with the given scalar value. | |
static Constant * | replaceUndefsWith (Constant *C, Constant *Replacement) |
Try to replace undefined constant C or undefined elements in C with Replacement. | |
static Constant * | mergeUndefsWith (Constant *C, Constant *Other) |
Merges undefs of a Constant with another Constant, along with the undefs already present. | |
Static Public Member Functions inherited from llvm::User | |
static bool | classof (const Value *V) |
Static Public Member Functions inherited from llvm::Value | |
static void | dropDroppableUse (Use &U) |
Remove the droppable use U . | |
Friends | |
class | Constant |
class | ConstantVector |
Additional Inherited Members | |
Public Types inherited from llvm::User | |
using | op_iterator = Use * |
using | const_op_iterator = const Use * |
using | op_range = iterator_range< op_iterator > |
using | const_op_range = iterator_range< const_op_iterator > |
Public Types inherited from llvm::Value | |
enum | ValueTy |
Concrete subclass of this. More... | |
using | use_iterator = use_iterator_impl< Use > |
using | const_use_iterator = use_iterator_impl< const Use > |
using | user_iterator = user_iterator_impl< User > |
using | const_user_iterator = user_iterator_impl< const User > |
Static Public Attributes inherited from llvm::Value | |
static constexpr unsigned | MaxAlignmentExponent = 32 |
The maximum alignment for instructions. | |
static constexpr uint64_t | MaximumAlignment = 1ULL << MaxAlignmentExponent |
Protected Types inherited from llvm::Value | |
enum | : unsigned { NumUserOperandsBits = 27 } |
The number of operands in the subclass. More... | |
Protected Member Functions inherited from llvm::ConstantData | |
ConstantData (Type *Ty, ValueTy VT) | |
void * | operator new (size_t S) |
Protected Member Functions inherited from llvm::Constant | |
Constant (Type *ty, ValueTy vty, Use *Ops, unsigned NumOps) | |
~Constant ()=default | |
Protected Member Functions inherited from llvm::User | |
void * | operator new (size_t Size) |
Allocate a User with an operand pointer co-allocated. | |
void * | operator new (size_t Size, unsigned Us) |
Allocate a User with the operands co-allocated. | |
void * | operator new (size_t Size, unsigned Us, unsigned DescBytes) |
Allocate a User with the operands co-allocated. | |
User (Type *ty, unsigned vty, Use *, unsigned NumOps) | |
void | allocHungoffUses (unsigned N, bool IsPhi=false) |
Allocate the array of Uses, followed by a pointer (with bottom bit set) to the User. | |
void | growHungoffUses (unsigned N, bool IsPhi=false) |
Grow the number of hung off uses. | |
~User ()=default | |
template<int Idx> | |
Use & | Op () |
template<int Idx> | |
const Use & | Op () const |
Protected Member Functions inherited from llvm::Value | |
Value (Type *Ty, unsigned scid) | |
~Value () | |
Value's destructor should be virtual by design, but that would require that Value and all of its subclasses have a vtable that effectively duplicates the information in the value ID. | |
void | getAllMetadata (SmallVectorImpl< std::pair< unsigned, MDNode * > > &MDs) const |
Appends all metadata attached to this value to MDs , sorting by KindID. | |
bool | hasMetadata () const |
Return true if this value has any metadata attached to it. | |
bool | eraseMetadata (unsigned KindID) |
Erase all metadata attachments with the given kind. | |
void | eraseMetadataIf (function_ref< bool(unsigned, MDNode *)> Pred) |
Erase all metadata attachments matching the given predicate. | |
void | clearMetadata () |
Erase all metadata attached to this Value. | |
MDNode * | getMetadataImpl (unsigned KindID) const |
Get metadata for the given kind, if any. | |
unsigned short | getSubclassDataFromValue () const |
void | setValueSubclassData (unsigned short D) |
MDNode * | getMetadata (unsigned KindID) const |
Get the current metadata attachments for the given kind, if any. | |
MDNode * | getMetadata (StringRef Kind) const |
void | getMetadata (unsigned KindID, SmallVectorImpl< MDNode * > &MDs) const |
Appends all attachments with the given ID to MDs in insertion order. | |
void | getMetadata (StringRef Kind, SmallVectorImpl< MDNode * > &MDs) const |
bool | hasMetadata (unsigned KindID) const |
Return true if this value has the given type of metadata attached. | |
bool | hasMetadata (StringRef Kind) const |
void | setMetadata (unsigned KindID, MDNode *Node) |
Set a particular kind of metadata attachment. | |
void | setMetadata (StringRef Kind, MDNode *Node) |
void | addMetadata (unsigned KindID, MDNode &MD) |
Add a metadata attachment. | |
void | addMetadata (StringRef Kind, MDNode &MD) |
Static Protected Member Functions inherited from llvm::User | |
template<int Idx, typename U > | |
static Use & | OpFrom (const U *that) |
Protected Attributes inherited from llvm::Value | |
unsigned char | SubclassOptionalData: 7 |
Hold subclass data that can be dropped. | |
unsigned | NumUserOperands: NumUserOperandsBits |
unsigned | IsUsedByMD: 1 |
unsigned | HasName: 1 |
unsigned | HasMetadata: 1 |
unsigned | HasHungOffUses: 1 |
unsigned | HasDescriptor: 1 |
ConstantFP - Floating Point Values [float, double].
Definition at line 269 of file Constants.h.
|
delete |
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition at line 343 of file Constants.h.
|
static |
Definition at line 1051 of file Constants.cpp.
References llvm::LLVMContextImpl::FPConstants, llvm::Type::getFloatingPointTy(), and llvm::LLVMContext::pImpl.
If Ty is a vector type, return a Constant with a splat of the given value.
Otherwise return a ConstantFP for the given value.
Definition at line 980 of file Constants.cpp.
References assert(), llvm::CallingConv::C, llvm::Type::getContext(), llvm::Type::getScalarType(), and llvm::ConstantVector::getSplat().
This returns a ConstantFP, or a vector containing a splat of a ConstantFP, for the specified value in the specified type.
This should only be used for simple constant values like 2.0/1.0 etc, that are known-valid both as host double and as the target format.
Definition at line 964 of file Constants.cpp.
References llvm::CallingConv::C, llvm::APFloat::convert(), llvm::Type::getContext(), llvm::Type::getFltSemantics(), llvm::Type::getScalarType(), llvm::ConstantVector::getSplat(), ignored(), and llvm::APFloatBase::rmNearestTiesToEven.
Definition at line 992 of file Constants.cpp.
References llvm::CallingConv::C, llvm::Type::getContext(), llvm::Type::getFltSemantics(), llvm::Type::getScalarType(), and llvm::ConstantVector::getSplat().
Definition at line 1084 of file Constants.cpp.
References llvm::CallingConv::C, llvm::Type::getContext(), llvm::Type::getFltSemantics(), llvm::APFloat::getInf(), llvm::Type::getScalarType(), and llvm::ConstantVector::getSplat().
Referenced by getFPClassConstant(), llvm::RecurrenceDescriptor::getRecurrenceIdentity(), and llvm::GCNTTIImpl::instCombineIntrinsic().
Definition at line 1005 of file Constants.cpp.
References llvm::CallingConv::C, llvm::Type::getContext(), llvm::Type::getFltSemantics(), llvm::APFloat::getNaN(), llvm::Type::getScalarType(), and llvm::ConstantVector::getSplat().
Referenced by llvm::ConstantFoldBinaryInstruction(), llvm::GCNTTIImpl::instCombineIntrinsic(), propagateNaN(), simplifyFPOp(), and simplifyLdexp().
Definition at line 307 of file Constants.h.
References getZero().
Referenced by llvm::createSimpleTargetReduction(), simplifyFRemInst(), and llvm::InstCombinerImpl::visitAtomicRMWInst().
|
static |
Definition at line 1016 of file Constants.cpp.
References llvm::CallingConv::C, llvm::Type::getContext(), llvm::Type::getFltSemantics(), llvm::APFloat::getQNaN(), llvm::Type::getScalarType(), and llvm::ConstantVector::getSplat().
Referenced by optimizeNaN().
|
static |
Definition at line 1027 of file Constants.cpp.
References llvm::CallingConv::C, llvm::Type::getContext(), llvm::Type::getFltSemantics(), llvm::Type::getScalarType(), llvm::APFloat::getSNaN(), and llvm::ConstantVector::getSplat().
Definition at line 313 of file Constants.h.
Referenced by llvm::CombinerHelper::applyCombineConstantFoldFpUnary(), and isKnownIntegral().
Definition at line 312 of file Constants.h.
Referenced by llvm::DwarfUnit::addConstantFPValue(), llvm::MachineIRBuilder::buildFConstant(), llvm::ConstantFoldFPBinOp(), emitGlobalConstantFP(), fitsInFPType(), llvm::FlushFPConstant(), llvm::generateSpecConstantInst(), llvm::getFConstantVRegValWithLookThrough(), llvm::FPMathOperator::getFPAccuracy(), llvm::SPIRVGlobalRegistry::getOrCreateConstFP(), llvm::GCNTTIImpl::instCombineIntrinsic(), llvm::isMathLibCallNoop(), LLVMConstRealGetDouble(), llvm::SPIRVMCInstLower::lower(), llvm::ARMAsmPrinter::lowerOperand(), llvm::CombinerHelper::matchCombineFMinMaxNaN(), llvm::CombinerHelper::matchCombineUnmergeConstant(), llvm::CombinerHelper::matchConstantFoldFMA(), matchFPExtFromF16(), llvm::CombinerHelper::replaceInstWithFConstant(), llvm::stableHashValue(), and llvm::LegalizerHelper::widenScalar().
Definition at line 1038 of file Constants.cpp.
References llvm::CallingConv::C, llvm::Type::getContext(), llvm::Type::getFltSemantics(), llvm::Type::getScalarType(), llvm::ConstantVector::getSplat(), and llvm::APFloat::getZero().
Referenced by expandIToFP(), foldFabsWithFcmpZero(), foldFCmpFNegCommonOp(), foldLogOpOfMaskedICmps_NotAllZeros_BMask_Mixed(), llvm::ConstantExpr::getBinOpIdentity(), getFPClassConstant(), getNegativeZero(), llvm::GCNTTIImpl::instCombineIntrinsic(), llvm::InstCombinerImpl::SimplifyDemandedUseFPClass(), simplifyFAddInst(), simplifyFDivInst(), simplifyFMAFMul(), simplifyFRemInst(), and llvm::InstCombinerImpl::visitFCmpInst().
We don't rely on operator== working on double values, as it returns true for things that are clearly not equal, like -0.0 and 0.0.
As such, this method can be used to do an exact bit-for-bit comparison of two floating point values. The version with a double operand is retained because it's so convenient to write isExactlyValue(2.0), but please use it only for simple constants.
Definition at line 1100 of file Constants.cpp.
References llvm::APFloat::bitwiseIsEqual().
Referenced by isExactlyValue().
|
inline |
Definition at line 335 of file Constants.h.
References llvm::APFloat::convert(), llvm::APFloat::getSemantics(), ignored(), isExactlyValue(), and llvm::APFloatBase::rmNearestTiesToEven.
|
inline |
Return true if the value is infinity.
Definition at line 322 of file Constants.h.
References llvm::APFloat::isInfinity().
|
inline |
Return true if the value is a NaN.
Definition at line 325 of file Constants.h.
References llvm::APFloat::isNaN().
|
inline |
Return true if the sign bit is set.
Definition at line 319 of file Constants.h.
References llvm::APFloat::isNegative().
Referenced by llvm::isNullOrNullSplat().
Return true if Ty is big enough to represent V.
Definition at line 1589 of file Constants.cpp.
References llvm::APFloatBase::BFloat(), llvm::Type::BFloatTyID, llvm::APFloat::convert(), llvm::Type::DoubleTyID, llvm::Type::FloatTyID, llvm::Type::FP128TyID, llvm::APFloat::getSemantics(), llvm::Type::getTypeID(), llvm::Type::HalfTyID, llvm::APFloatBase::IEEEdouble(), llvm::APFloatBase::IEEEhalf(), llvm::APFloatBase::IEEEquad(), llvm::APFloatBase::IEEEsingle(), llvm::Type::PPC_FP128TyID, llvm::APFloatBase::PPCDoubleDouble(), llvm::APFloatBase::rmNearestTiesToEven, llvm::Type::X86_FP80TyID, and llvm::APFloatBase::x87DoubleExtended().
|
inline |
Return true if the value is positive or negative zero.
Definition at line 316 of file Constants.h.
References llvm::APFloat::isZero().
Referenced by llvm::isNullOrNullSplat().
|
friend |
Definition at line 270 of file Constants.h.
|
friend |
Definition at line 271 of file Constants.h.