LLVM 20.0.0git
|
The fixed point semantics work similarly to fltSemantics. More...
#include "llvm/ADT/APFixedPoint.h"
Classes | |
struct | Lsb |
Used to differentiate between constructors with Width and Lsb from the default Width and scale. More... | |
Public Member Functions | |
FixedPointSemantics (unsigned Width, unsigned Scale, bool IsSigned, bool IsSaturated, bool HasUnsignedPadding) | |
FixedPointSemantics (unsigned Width, Lsb Weight, bool IsSigned, bool IsSaturated, bool HasUnsignedPadding) | |
bool | isValidLegacySema () const |
Check if the Semantic follow the requirements of an older more limited version of this class. | |
unsigned | getWidth () const |
unsigned | getScale () const |
int | getLsbWeight () const |
int | getMsbWeight () const |
bool | isSigned () const |
bool | isSaturated () const |
bool | hasUnsignedPadding () const |
void | setSaturated (bool Saturated) |
bool | hasSignOrPaddingBit () const |
return true if the first bit doesn't have a strictly positive weight | |
unsigned | getIntegralBits () const |
Return the number of integral bits represented by these semantics. | |
FixedPointSemantics | getCommonSemantics (const FixedPointSemantics &Other) const |
Return the FixedPointSemantics that allows for calculating the full precision semantic that can precisely represent the precision and ranges of both input values. | |
void | print (llvm::raw_ostream &OS) const |
Print semantics for debug purposes. | |
bool | fitsInFloatSemantics (const fltSemantics &FloatSema) const |
Returns true if this fixed-point semantic with its value bits interpreted as an integer can fit in the given floating point semantic without overflowing to infinity. | |
bool | operator== (FixedPointSemantics Other) const |
bool | operator!= (FixedPointSemantics Other) const |
uint32_t | toOpaqueInt () const |
Convert the semantics to a 32-bit unsigned integer. | |
Static Public Member Functions | |
static FixedPointSemantics | GetIntegerSemantics (unsigned Width, bool IsSigned) |
Return the FixedPointSemantics for an integer type. | |
static FixedPointSemantics | getFromOpaqueInt (uint32_t) |
Create a FixedPointSemantics object from an integer created via toOpaqueInt(). | |
Static Public Attributes | |
static constexpr unsigned | WidthBitWidth = 16 |
static constexpr unsigned | LsbWeightBitWidth = 13 |
The fixed point semantics work similarly to fltSemantics.
The width specifies the whole bit width of the underlying scaled integer (with padding if any). The scale represents the number of fractional bits in this type. When HasUnsignedPadding is true and this type is unsigned, the first bit in the value this represents is treated as padding.
Definition at line 34 of file APFixedPoint.h.
|
inline |
Definition at line 43 of file APFixedPoint.h.
|
inline |
Definition at line 47 of file APFixedPoint.h.
References assert(), and llvm::FixedPointSemantics::Lsb::LsbWeight.
bool llvm::FixedPointSemantics::fitsInFloatSemantics | ( | const fltSemantics & | FloatSema | ) | const |
Returns true if this fixed-point semantic with its value bits interpreted as an integer can fit in the given floating point semantic without overflowing to infinity.
For example, a signed 8-bit fixed-point semantic has a maximum and minimum integer representation of 127 and -128, respectively. If both of these values can be represented (possibly inexactly) in the floating point semantic without overflowing, this returns true.
Definition at line 148 of file APFixedPoint.cpp.
References F, llvm::APFixedPoint::getMax(), llvm::APFixedPoint::getMin(), llvm::APFixedPoint::getValue(), isSigned(), llvm::APSInt::isSigned(), llvm::APFloatBase::opOverflow, and llvm::APFloatBase::rmNearestTiesToAway.
Referenced by llvm::APFixedPoint::convertToFloat(), and llvm::APFixedPoint::getFromFloatValue().
FixedPointSemantics llvm::FixedPointSemantics::getCommonSemantics | ( | const FixedPointSemantics & | Other | ) | const |
Return the FixedPointSemantics that allows for calculating the full precision semantic that can precisely represent the precision and ranges of both input values.
This does not compute the resulting semantics for a given binary operation.
Definition at line 171 of file APFixedPoint.cpp.
References getLsbWeight(), getMsbWeight(), hasSignOrPaddingBit(), hasUnsignedPadding(), isSaturated(), isSigned(), and llvm::Other.
Referenced by llvm::APFixedPoint::add(), llvm::FixedPointBuilder< IRBuilderTy >::CreateAdd(), llvm::FixedPointBuilder< IRBuilderTy >::CreateDiv(), llvm::FixedPointBuilder< IRBuilderTy >::CreateMul(), llvm::FixedPointBuilder< IRBuilderTy >::CreateSub(), llvm::APFixedPoint::div(), llvm::APFixedPoint::mul(), and llvm::APFixedPoint::sub().
|
static |
Create a FixedPointSemantics object from an integer created via toOpaqueInt().
Definition at line 36 of file APFixedPoint.cpp.
|
inlinestatic |
Return the FixedPointSemantics for an integer type.
Definition at line 103 of file APFixedPoint.h.
Referenced by llvm::FixedPointBuilder< IRBuilderTy >::CreateFixedToInteger(), llvm::FixedPointBuilder< IRBuilderTy >::CreateIntegerToFixed(), and llvm::APFixedPoint::getFromIntValue().
|
inline |
Return the number of integral bits represented by these semantics.
These are separate from the fractional bits and do not include the sign or padding bit.
Definition at line 79 of file APFixedPoint.h.
References getMsbWeight(), and hasSignOrPaddingBit().
Referenced by llvm::APFixedPoint::convert().
|
inline |
Definition at line 63 of file APFixedPoint.h.
Referenced by llvm::APFixedPoint::convert(), llvm::APFixedPoint::convertToFloat(), getCommonSemantics(), llvm::APFixedPoint::getFromFloatValue(), llvm::APFixedPoint::getLsbWeight(), and print().
|
inline |
Definition at line 64 of file APFixedPoint.h.
Referenced by getCommonSemantics(), getIntegralBits(), llvm::APFixedPoint::getMsbWeight(), and print().
|
inline |
Definition at line 62 of file APFixedPoint.h.
References assert(), and isValidLegacySema().
Referenced by llvm::FixedPointBuilder< IRBuilderTy >::CreateFixedToFloating(), llvm::FixedPointBuilder< IRBuilderTy >::CreateFloatingToFixed(), llvm::APFixedPoint::getScale(), and print().
|
inline |
Definition at line 61 of file APFixedPoint.h.
Referenced by llvm::APFixedPoint::APFixedPoint(), llvm::APFixedPoint::convert(), llvm::FixedPointBuilder< IRBuilderTy >::CreateFloatingToFixed(), llvm::APFixedPoint::getEpsilon(), llvm::APFixedPoint::getFromFloatValue(), llvm::APFixedPoint::getMax(), llvm::APFixedPoint::getMin(), llvm::APFixedPoint::getWidth(), print(), and llvm::APFixedPoint::shl().
|
inline |
return true if the first bit doesn't have a strictly positive weight
Definition at line 74 of file APFixedPoint.h.
Referenced by getCommonSemantics(), and getIntegralBits().
|
inline |
Definition at line 69 of file APFixedPoint.h.
Referenced by llvm::FixedPointBuilder< IRBuilderTy >::CreateFloatingToFixed(), llvm::FixedPointBuilder< IRBuilderTy >::CreateShl(), getCommonSemantics(), llvm::APFixedPoint::getMax(), and llvm::APFixedPoint::hasPadding().
|
inline |
Definition at line 68 of file APFixedPoint.h.
Referenced by llvm::APFixedPoint::convert(), llvm::FixedPointBuilder< IRBuilderTy >::CreateFloatingToFixed(), llvm::FixedPointBuilder< IRBuilderTy >::CreateShl(), getCommonSemantics(), llvm::APFixedPoint::getFromFloatValue(), llvm::APFixedPoint::isSaturated(), and llvm::APFixedPoint::shl().
|
inline |
Definition at line 67 of file APFixedPoint.h.
Referenced by llvm::APFixedPoint::convert(), llvm::APFixedPoint::convertToFloat(), llvm::FixedPointBuilder< IRBuilderTy >::CreateFixedToFloating(), llvm::FixedPointBuilder< IRBuilderTy >::CreateFloatingToFixed(), llvm::FixedPointBuilder< IRBuilderTy >::CreateShl(), llvm::FixedPointBuilder< IRBuilderTy >::CreateShr(), fitsInFloatSemantics(), getCommonSemantics(), llvm::APFixedPoint::getEpsilon(), llvm::APFixedPoint::getFromFloatValue(), llvm::APFixedPoint::getMax(), llvm::APFixedPoint::getMin(), llvm::APFixedPoint::getValue(), llvm::APFixedPoint::isSigned(), and llvm::APFixedPoint::shl().
|
inline |
Check if the Semantic follow the requirements of an older more limited version of this class.
Definition at line 58 of file APFixedPoint.h.
Referenced by getScale(), and print().
|
inline |
Definition at line 115 of file APFixedPoint.h.
References llvm::Other.
|
inline |
Definition at line 110 of file APFixedPoint.h.
References llvm::Other.
void llvm::FixedPointSemantics::print | ( | llvm::raw_ostream & | OS | ) | const |
Print semantics for debug purposes.
Definition at line 21 of file APFixedPoint.cpp.
References getLsbWeight(), getMsbWeight(), getScale(), getWidth(), isValidLegacySema(), and OS.
Referenced by llvm::APFixedPoint::print().
|
inline |
Definition at line 71 of file APFixedPoint.h.
uint32_t llvm::FixedPointSemantics::toOpaqueInt | ( | ) | const |
Convert the semantics to a 32-bit unsigned integer.
The result is dependent on the host endianness and not stable across LLVM versions. See getFromOpaqueInt() to convert it back to a FixedPointSemantics object.
Definition at line 32 of file APFixedPoint.cpp.
|
staticconstexpr |
Definition at line 37 of file APFixedPoint.h.
|
staticconstexpr |
Definition at line 36 of file APFixedPoint.h.