LLVM: llvm::detail Namespace Reference (original) (raw)
A self-contained host- and target-independent arbitrary-precision floating-point software implementation. More...
| Classes | |
|---|---|
| class | AllocatorHolder |
| class | AllocatorHolder< Alloc & > |
| struct | AnalysisPassConcept |
| Abstract concept of an analysis pass. More... | |
| struct | AnalysisPassModel |
| Wrapper to model the analysis pass concept. More... | |
| struct | AnalysisResultConcept |
| Abstract concept of an analysis result. More... | |
| struct | AnalysisResultModel |
| Wrapper to model the analysis result concept. More... | |
| struct | AnalysisResultModel< IRUnitT, PassT, ResultT, InvalidatorT, false > |
| Specialization of AnalysisResultModel which provides the default invalidate functionality. More... | |
| struct | AnalysisResultModel< IRUnitT, PassT, ResultT, InvalidatorT, true > |
| Specialization of AnalysisResultModel which delegates invalidate handling to ResultT. More... | |
| class | BCField |
| Convenience base for all kinds of bitcode abbreviation fields. More... | |
| class | BCRecordCoding |
| Helper class for dealing with a scalar element in the middle of a record. More... | |
| class | BCRecordCoding< BCArray< ElementTy > > |
| Helper class for dealing with an array at the end of a record. More... | |
| class | BCRecordCoding< BCBlob > |
| Helper class for dealing with a blob at the end of a record. More... | |
| class | BCRecordCoding< ElementTy > |
| Helper class for dealing with a scalar element at the end of a record. More... | |
| struct | CastFunc |
| struct | CastIfPresentFunc |
| struct | CheckedInt |
| class | concat_range |
| Helper to store a sequence of ranges being concatenated and access them. More... | |
| struct | decay_if_c_char_array |
| struct | decay_if_c_char_array< char[N]> |
| struct | DenseMapPair |
| struct | DenseSetEmpty |
| class | DenseSetImpl |
| Base class for DenseSet and DenseSmallSet. More... | |
| class | DenseSetPair |
| struct | detector |
| struct | detector< std::void_t< Op< Args... > >, Op, Args... > |
| class | DoubleAPFloat |
| struct | DynCastFunc |
| struct | DynCastIfPresentFunc |
| struct | enumerator_result |
| Tuple-like type for zip_enumerator dereference. More... | |
| struct | enumerator_result< std::size_t, Refs... > |
| struct | ErrorHolder |
| class | ErrorMatchesMono |
| class | ErrorMessageMatches |
| struct | ExpectedHolder |
| class | first_or_second_type |
| Return a reference to the first or second member of a reference. More... | |
| struct | HasPointerLikeTypeTraits |
| struct | HasPointerLikeTypeTraits< T, decltype((sizeof(PointerLikeTypeTraits< T >)+sizeof(T)), void())> |
| struct | IdentityIndex |
| class | IEEEFloat |
| struct | index_iterator |
| struct | index_stream |
| Infinite stream of increasing 0-based size_t indices. More... | |
| class | indexed_accessor_range_base |
| The class represents the base of a range of indexed_accessor_iterators. More... | |
| struct | is_array |
| A type trait whose value field is true if the given type is a BCArray (of any element kind). More... | |
| struct | IsaAndPresentCheckPredicate |
| struct | IsaCheckPredicate |
| struct | IsPointerLike |
| struct | IsPointerLike< T * > |
| struct | last_type |
| A type trait whose type field is the last of its template parameters. More... | |
| struct | last_type< Head > |
| struct | PassConcept |
| Template for the abstract base class used to dispatch polymorphically over pass objects. More... | |
| struct | PassModel |
| A template wrapper used to implement the polymorphic API. More... | |
| struct | PointerSumTypeHelper |
| A helper template for implementing PointerSumType. More... | |
| class | PtrUseVisitorBase |
| Implementation of non-dependent functionality for PtrUseVisitor. More... | |
| struct | PunnedPointer |
| class | ResultHasInvalidateMethod |
| SFINAE metafunction for computing whether ResultT provides an invalidate member function. More... | |
| struct | SafeIntIterator |
| class | scope_exit |
| class | SlowDynamicAPInt |
| A simple class providing dynamic arbitrary-precision arithmetic. More... | |
| struct | StaticCastFunc |
| Usable in generic algorithms like map_range. More... | |
| class | StringMapEntryMatcher |
| class | StringMapEntryMatcherImpl |
| class | TypeSwitchBase |
| class | UniqueFunctionBase |
| struct | unit |
| struct | unit< std::micro > |
| struct | unit< std::milli > |
| struct | unit< std::nano > |
| struct | unit< std::ratio< 1 > > |
| struct | unit< std::ratio< 3600 > > |
| struct | unit< std::ratio< 60 > > |
| class | ValueIsMatcher |
| class | ValueMatchesMono |
| class | ValueMatchesPoly |
| struct | Visitor |
| struct | Visitor< HeadT > |
| struct | Visitor< HeadT, TailTs... > |
| struct | zip_common |
| struct | zip_enumerator |
| Zippy iterator that uses the second iterator for comparisons. More... | |
| struct | zip_first |
| class | zip_longest_iterator |
| class | zip_longest_range |
| struct | zip_shortest |
| struct | ZipLongestItemType |
| struct | ZipLongestTupleType |
| class | zippy |
| struct | ZippyIteratorTuple |
| Helper to obtain the iterator types for the tuple storage within zippy. More... | |
| struct | ZippyIteratorTuple< ItType, const std::tuple< Args... >, std::index_sequence< Ns... > > |
| Partial specialization for const tuple storage. More... | |
| struct | ZippyIteratorTuple< ItType, std::tuple< Args... >, std::index_sequence< Ns... > > |
| Partial specialization for non-const tuple storage. More... | |
| struct | ZipTupleType |
| Typedefs | |
|---|---|
| template | |
| using | IterOfRange = decltype(adl_begin(std::declval<RangeT &>())) |
| template | |
| using | ValueOfRange |
| using | integerPart = APFloatBase::integerPart |
| using | uninitializedTag = APFloatBase::uninitializedTag |
| using | roundingMode = APFloatBase::roundingMode |
| using | opStatus = APFloatBase::opStatus |
| using | cmpResult = APFloatBase::cmpResult |
| using | fltCategory = APFloatBase::fltCategory |
| using | ExponentType = APFloatBase::ExponentType |
| template<typename ValueT, typename ValueInfoT> | |
| using | DenseSet |
| template<typename ValueT, unsigned InlineBuckets, typename ValueInfoT> | |
| using | SmallDenseSet |
| template<typename CallableT, typename ThisT> | |
| using | EnableUnlessSameType |
| template<typename CallableT, typename Ret, typename... Params> | |
| using | EnableIfCallable |
| template<typename T> | |
| using | has_number_t |
| template<typename Set, typename Fn> | |
| using | check_has_member_remove_if_t |
| template | |
| using | check_has_member_erase_iter_t |
| template<typename Range> | |
| using | check_has_free_function_rbegin |
| template | |
| using | fwd_or_bidi_tag |
| A type alias which is std::bidirectional_iterator_tag if the category of IterT derives from it, and std::forward_iterator_tag otherwise. | |
| template<typename ZipType, typename ReferenceTupleType, typename... Iters> | |
| using | zip_traits |
| template<typename T> | |
| using | sort_trivially_copyable |
| template<typename Range> | |
| using | check_has_free_function_size |
| template<typename Range, typename Element> | |
| using | check_has_member_contains_t |
| template<typename Range, typename Element> | |
| using | check_has_member_find_t |
| template<typename... Iters> | |
| using | EnumeratorTupleType = enumerator_result<decltype(*declval())...> |
| template<typename T> | |
| using | has_sizeof = decltype(sizeof(T)) |
| template<typename... Types> | |
| using | has_blob = std::is_same<BCBlob, typename last_type<int, Types...>::type> |
| A type trait whose value field is true if the last type is BCBlob. | |
| template<typename... Types> | |
| using | has_array = is_array<typename last_type<int, Types...>::type> |
| A type trait whose value field is true if the last type is a BCArray (of any element kind). | |
| template<typename OptionalDerived, typename Default> | |
| using | SelfType |
| A helper to derive the type to use with Self for cast traits, when the provided CRTP derived type is allowed to be void. | |
| template<typename T> | |
| using | decay_if_c_char_array_t = typename decay_if_c_char_array<T>::type |
| template | |
| using | has_hoist_check = decltype(&BlockT::isLegalToHoistInto) |
| template | |
| using | detect_has_hoist_check = llvm::is_detected<has_hoist_check, BlockT> |
| template<typename T> | |
| using | check_ostream |
| Functions | |
|---|---|
| LLVM_ABI hash_code | hash_value (const IEEEFloat &Arg) |
| LLVM_ABI int | ilogb (const IEEEFloat &Arg) |
| LLVM_ABI IEEEFloat | scalbn (IEEEFloat X, int Exp, roundingMode RoundingMode) |
| LLVM_ABI IEEEFloat | frexp (const IEEEFloat &Val, int &Exp, roundingMode RM) |
| LLVM_ABI hash_code | hash_value (const DoubleAPFloat &Arg) |
| LLVM_ABI DoubleAPFloat | scalbn (const DoubleAPFloat &Arg, int Exp, roundingMode RM) |
| LLVM_ABI DoubleAPFloat | frexp (const DoubleAPFloat &X, int &Exp, roundingMode) |
| unsigned | combineHashValue (unsigned a, unsigned b) |
| Simplistic combination of 32-bit hash values into 32-bit hash values. | |
| template<typename ValueT, typename MapTy, typename ValueInfoT> | |
| bool | operator== (const DenseSetImpl< ValueT, MapTy, ValueInfoT > &LHS, const DenseSetImpl< ValueT, MapTy, ValueInfoT > &RHS) |
| Equality comparison for DenseSet. | |
| template<typename ValueT, typename MapTy, typename ValueInfoT> | |
| bool | operator!= (const DenseSetImpl< ValueT, MapTy, ValueInfoT > &LHS, const DenseSetImpl< ValueT, MapTy, ValueInfoT > &RHS) |
| Inequality comparison for DenseSet. | |
| template<typename T, typename U> | |
| bool | canTypeFitValue (const U Value) |
| template<class S1Ty, class S2Ty> | |
| bool | set_intersects_impl (const S1Ty &S1, const S2Ty &S2) |
| raw_ostream & | operator<< (raw_ostream &OS, const SlowDynamicAPInt &X) |
| LLVM_ABI SlowDynamicAPInt | mod (const SlowDynamicAPInt &LHS, const SlowDynamicAPInt &RHS) |
| Returns the remainder of dividing LHS by RHS. | |
| LLVM_ABI SlowDynamicAPInt | lcm (const SlowDynamicAPInt &A, const SlowDynamicAPInt &B) |
| Returns the least common multiple of A and B. | |
| LLVM_ABI SlowDynamicAPInt | abs (const SlowDynamicAPInt &X) |
| Redeclarations of friend declarations above to make it discoverable by lookups. | |
| LLVM_ABI SlowDynamicAPInt | ceilDiv (const SlowDynamicAPInt &LHS, const SlowDynamicAPInt &RHS) |
| LLVM_ABI SlowDynamicAPInt | floorDiv (const SlowDynamicAPInt &LHS, const SlowDynamicAPInt &RHS) |
| LLVM_ABI SlowDynamicAPInt | gcd (const SlowDynamicAPInt &A, const SlowDynamicAPInt &B) |
| LLVM_ABI hash_code | hash_value (const SlowDynamicAPInt &X) |
| LLVM_ABI SlowDynamicAPInt & | operator+= (SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI SlowDynamicAPInt & | operator-= (SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI SlowDynamicAPInt & | operator*= (SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI SlowDynamicAPInt & | operator/= (SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI SlowDynamicAPInt & | operator%= (SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI bool | operator== (const SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI bool | operator!= (const SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI bool | operator> (const SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI bool | operator< (const SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI bool | operator<= (const SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI bool | operator>= (const SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI SlowDynamicAPInt | operator+ (const SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI SlowDynamicAPInt | operator- (const SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI SlowDynamicAPInt | operator* (const SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI SlowDynamicAPInt | operator/ (const SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI SlowDynamicAPInt | operator% (const SlowDynamicAPInt &A, int64_t B) |
| LLVM_ABI bool | operator== (int64_t A, const SlowDynamicAPInt &B) |
| LLVM_ABI bool | operator!= (int64_t A, const SlowDynamicAPInt &B) |
| LLVM_ABI bool | operator> (int64_t A, const SlowDynamicAPInt &B) |
| LLVM_ABI bool | operator< (int64_t A, const SlowDynamicAPInt &B) |
| LLVM_ABI bool | operator<= (int64_t A, const SlowDynamicAPInt &B) |
| LLVM_ABI bool | operator>= (int64_t A, const SlowDynamicAPInt &B) |
| LLVM_ABI SlowDynamicAPInt | operator+ (int64_t A, const SlowDynamicAPInt &B) |
| LLVM_ABI SlowDynamicAPInt | operator- (int64_t A, const SlowDynamicAPInt &B) |
| LLVM_ABI SlowDynamicAPInt | operator* (int64_t A, const SlowDynamicAPInt &B) |
| LLVM_ABI SlowDynamicAPInt | operator/ (int64_t A, const SlowDynamicAPInt &B) |
| LLVM_ABI SlowDynamicAPInt | operator% (int64_t A, const SlowDynamicAPInt &B) |
| template | |
| Iter | next_or_end (const Iter &I, const Iter &End) |
| template | |
| auto | deref_or_none (const Iter &I, const Iter &End) -> std::optional< std::remove_const_t< std::remove_reference_t< decltype(*I)> > > |
| template<typename OtherT, typename DerivedT, typename BaseT, typename T, typename PointerT, typename ReferenceT> | |
| bool | operator== (const indexed_accessor_range_base< DerivedT, BaseT, T, PointerT, ReferenceT > &lhs, const OtherT &rhs) |
| Compare this range with another. | |
| template<typename OtherT, typename DerivedT, typename BaseT, typename T, typename PointerT, typename ReferenceT> | |
| bool | operator!= (const indexed_accessor_range_base< DerivedT, BaseT, T, PointerT, ReferenceT > &lhs, const OtherT &rhs) |
| template<typename Predicate, typename... Args> | |
| bool | all_of_zip_predicate_first (Predicate &&P, Args &&...args) |
| template<typename... ArgsThenPredicate, size_t... InputIndexes> | |
| bool | all_of_zip_predicate_last (std::tuple< ArgsThenPredicate... > argsThenPredicate, std::index_sequence< InputIndexes... >) |
| template<typename N> | |
| bool | to_float (const Twine &T, N &Num, N(*StrTo)(const char *, char **)) |
| template | |
| std::string | join_impl (IteratorT Begin, IteratorT End, StringRef Separator, std::input_iterator_tag) |
| template | |
| std::string | join_impl (IteratorT Begin, IteratorT End, StringRef Separator, std::forward_iterator_tag) |
| template | |
| void | join_items_impl (std::string &Result, Sep Separator) |
| template<typename Sep, typename Arg> | |
| void | join_items_impl (std::string &Result, Sep Separator, const Arg &Item) |
| template<typename Sep, typename Arg1, typename... Args> | |
| void | join_items_impl (std::string &Result, Sep Separator, const Arg1 &A1, Args &&... Items) |
| size_t | join_one_item_size (char) |
| size_t | join_one_item_size (const char *S) |
| template<typename T> | |
| size_t | join_one_item_size (const T &Str) |
| template<typename... Args> | |
| size_t | join_items_size (Args &&...Items) |
| template | |
| static void | emitOps (llvm::BitCodeAbbrev &abbrev) |
| Attaches the last field to an abbreviation. | |
| template<typename FieldTy, typename Next, typename... Rest> | |
| static void | emitOps (llvm::BitCodeAbbrev &abbrev) |
| Attaches fields to an abbreviation. | |
| template | |
| DieType | resolveReferencedType (DieType D, dwarf::Attribute Attr=dwarf::DW_AT_type) |
| template | |
| DieType | resolveReferencedType (DieType D, typename DieType::DWARFFormValue F) |
| template | |
| const char * | toString (std::optional< DWARFFormValueType > F) |
| template | |
| DieType | unwrapReferencedTypedefType (DieType D) |
| Resolve the DW_AT_type of D until we reach a DIE that is not a DW_TAG_typedef. | |
| template<typename PassT, typename IRUnitT, typename AnalysisManagerT, typename... ArgTs, size_t... Ns> | |
| PassT::Result | getAnalysisResultUnpackTuple (AnalysisManagerT &AM, IRUnitT &IR, std::tuple< ArgTs... > Args, std::index_sequence< Ns... >) |
| Actual unpacker of extra arguments in getAnalysisResult, passes only those tuple arguments that are mentioned in index_sequence. | |
| template<typename PassT, typename IRUnitT, typename... AnalysisArgTs, typename... MainArgTs> | |
| PassT::Result | getAnalysisResult (AnalysisManager< IRUnitT, AnalysisArgTs... > &AM, IRUnitT &IR, std::tuple< MainArgTs... > Args) |
| Helper for partial unpacking of extra arguments in getAnalysisResult. | |
| LLVM_ABI void | printBumpPtrAllocatorStats (unsigned NumSlabs, size_t BytesAllocated, size_t TotalMemory) |
| template<typename T> | |
| bool | isPresent (const T &t) |
| template<typename T> | |
| decltype(auto) | unwrapValue (T &t) |
| template<typename Range> | |
| auto | reverse_if_helper (Range &&R, std::bool_constant< false >) |
| template<typename Range> | |
| auto | reverse_if_helper (Range &&R, std::bool_constant< true >) |
| template<bool B, typename Range> | |
| auto | reverse_if (Range &&R) |
| template | |
| bool | isLegalToHoistInto (BlockT *Block) |
| SFINAE functions that dispatch to the isLegalToHoistInto member function or return false, if it doesn't exist. | |
| ErrorHolder | TakeError (Error Err) |
| template<typename T> | |
| ExpectedHolder< T > | TakeExpected (Expected< T > &Exp) |
| template<typename T> | |
| ExpectedHolder< T > | TakeExpected (Expected< T > &&Exp) |
| void | PrintTo (const ErrorHolder &Err, std::ostream *Out) |
| template<typename T> | |
| void | PrintTo (const ExpectedHolder< T > &Item, std::ostream *Out) |
| static void | tcSetLeastSignificantBits (APInt::WordType *dst, unsigned parts, unsigned bits) |
| static std::pair< APFloat, APFloat > | fastTwoSum (APFloat X, APFloat Y) |
| int | ilogb (const DoubleAPFloat &Arg) |
| DoubleAPFloat | scalbn (const DoubleAPFloat &Arg, int Exp, APFloat::roundingMode RM) |
| DoubleAPFloat | frexp (const DoubleAPFloat &Arg, int &Exp, APFloat::roundingMode RM) |
| template<typename DstTy, typename RecipeBasePtrTy> | |
| static auto | castToVPIRMetadata (RecipeBasePtrTy R) -> DstTy |
| Variables | |
|---|---|
| static constexpr uninitializedTag | uninitialized = APFloatBase::uninitialized |
| static constexpr roundingMode | rmNearestTiesToEven |
| static constexpr roundingMode | rmNearestTiesToAway |
| static constexpr roundingMode | rmTowardNegative = APFloatBase::rmTowardNegative |
| static constexpr roundingMode | rmTowardPositive = APFloatBase::rmTowardPositive |
| static constexpr roundingMode | rmTowardZero = APFloatBase::rmTowardZero |
| static constexpr unsigned | integerPartWidth = APFloatBase::integerPartWidth |
| static constexpr cmpResult | cmpEqual = APFloatBase::cmpEqual |
| static constexpr cmpResult | cmpLessThan = APFloatBase::cmpLessThan |
| static constexpr cmpResult | cmpGreaterThan = APFloatBase::cmpGreaterThan |
| static constexpr cmpResult | cmpUnordered = APFloatBase::cmpUnordered |
| static constexpr opStatus | opOK = APFloatBase::opOK |
| static constexpr opStatus | opInvalidOp = APFloatBase::opInvalidOp |
| static constexpr opStatus | opDivByZero = APFloatBase::opDivByZero |
| static constexpr opStatus | opOverflow = APFloatBase::opOverflow |
| static constexpr opStatus | opUnderflow = APFloatBase::opUnderflow |
| static constexpr opStatus | opInexact = APFloatBase::opInexact |
| static constexpr fltCategory | fcInfinity = APFloatBase::fcInfinity |
| static constexpr fltCategory | fcNaN = APFloatBase::fcNaN |
| static constexpr fltCategory | fcNormal = APFloatBase::fcNormal |
| static constexpr fltCategory | fcZero = APFloatBase::fcZero |
| template<typename Set, typename Fn> | |
| static constexpr bool | HasMemberRemoveIf |
| template | |
| static constexpr bool | HasMemberEraseIter |
| template<typename Range> | |
| static constexpr bool | HasFreeFunctionRBegin |
| template<typename Range> | |
| static constexpr bool | HasFreeFunctionSize |
| template<typename Range, typename Element> | |
| static constexpr bool | HasMemberContains |
| template<typename Range, typename Element> | |
| static constexpr bool | HasMemberFind |
| template | |
| const char | unit< Period >::value [] = "" |
A self-contained host- and target-independent arbitrary-precision floating-point software implementation.
Casting from (const) VPRecipeBase -> (const) VPIRMetadata is supported for all recipe types implementing VPIRMetadata.
These are templated helper classes used by the format function that capture the object to be formatted and the format string.
These are wrappers over isa* function that allow them to be used in generic algorithms such as llvm:all_of, llvm::none_of, etc.
APFloat uses bignum integer arithmetic as provided by static functions in the APInt class. The library will work with bignum integers whose parts are any unsigned type at least 16 bits wide, but 64 bits is recommended.
Written for clarity rather than speed, in particular with a view to use in the front-end of a cross compiler so that target arithmetic can be correctly performed on the host. Performance should nonetheless be reasonable, particularly for its intended use. It may be useful as a base implementation for a run-time library during development of a faster target-specific one.
All 5 rounding modes in the IEEE-754R draft are handled correctly for all implemented operations. Currently implemented operations are add, subtract, multiply, divide, fused-multiply-add, conversion-to-float, conversion-to-integer and conversion-from-integer. New rounding modes (e.g. away from zero) can be added with three or four lines of code.
Four formats are built-in: IEEE single precision, double precision, quadruple precision, and x87 80-bit extended double (when operating with full extended precision). Adding a new format that obeys IEEE semantics only requires adding two lines of code: a declaration and definition of the format.
All operations return the status of that operation as an exception bit-mask, so multiple operations can be done consecutively with their results or-ed together. The returned status can be useful for compiler diagnostics; e.g., inexact, underflow and overflow can be easily diagnosed on constant folding, and compiler optimizers can determine what exceptions would be raised by folding operations and optimize, or perhaps not optimize, accordingly.
At present, underflow tininess is detected after rounding; it should be straight forward to add support for the before-rounding case too.
The library reads hexadecimal floating point numbers as per C99, and correctly rounds if necessary according to the specified rounding mode. Syntax is required to have been validated by the caller. It also converts floating point numbers to hexadecimal text as per the C99 a and A conversions. The output precision (or alternatively the natural minimal precision) can be specified; if the requested precision is less than the natural precision the output is correctly rounded for the specified rounding mode.
It also reads decimal floating point numbers and correctly rounds according to the specified rounding mode.
Conversion to decimal text is not currently implemented.
Non-zero finite numbers are represented internally as a sign bit, a 16-bit signed exponent, and the significand as an array of integer parts. After normalization of a number of precision P the exponent is within the range of the format, and if the number is not denormal the P-th bit of the significand is set as an explicit integer bit. For denormals the most significant bit is shifted right so that the exponent is maintained at the format's minimum, so that the smallest denormal has just the least significant bit of the significand set. The sign of zeroes and infinities is significant; the exponent and significand of such numbers is not stored, but has a known implicit (deterministic) value: 0 for the significands, 0 for zero exponent, all 1 bits for infinity exponent. For NaNs the sign and significand are deterministic, although not really meaningful, and preserved in non-conversion operations. The exponent is implicitly all 1 bits.
APFloat does not provide any exception handling beyond default exception handling. We represent Signaling NaNs via IEEE-754R 2008 6.2.1 should clause by encoding Signaling NaNs with the first bit of its trailing significand as 0.
TODO
Some features that may or may not be worth adding:
Binary to decimal conversion (hard).
Optional ability to detect underflow tininess before rounding.
New formats: x87 in single and double precision mode (IEEE apart from extended exponent range) (hard).
New operations: sqrt, IEEE remainder, C90 fmod, nexttoward.
This is accomplished by exposing the isa* functions through function objects with a generic function call operator.
When actually printed, this synthesizes the string into a temporary buffer provided and returns whether or not it is big enough.
Used by isa<> & co.
◆ check_has_free_function_rbegin
Initial value:
decltype(adl_rbegin(std::declval<Range &>()))
constexpr auto adl_rbegin(RangeT &&range) -> decltype(adl_detail::rbegin_impl(std::forward< RangeT >(range)))
Returns the reverse-begin iterator to range using std::rbegin and function found through Argument-Dep...
Definition at line 396 of file STLExtras.h.
◆ check_has_free_function_size
Initial value:
decltype(adl_size(std::declval<Range &>()))
constexpr auto adl_size(RangeT &&range) -> decltype(adl_detail::size_impl(std::forward< RangeT >(range)))
Returns the size of range using std::size and functions found through Argument-Dependent Lookup (ADL)...
Definition at line 1678 of file STLExtras.h.
◆ check_has_member_contains_t
template<typename Range, typename Element>
Initial value:
decltype(std::declval<Range &>().contains(std::declval<const Element &>()))
Definition at line 1885 of file STLExtras.h.
◆ check_has_member_erase_iter_t
Initial value:
decltype(std::declval().erase(std::declval().begin()))
Definition at line 32 of file SetOperations.h.
◆ check_has_member_find_t
template<typename Range, typename Element>
Initial value:
decltype(std::declval<Range &>().find(std::declval<const Element &>()) !=
std::declval<Range &>().end())
Definition at line 1893 of file STLExtras.h.
◆ check_has_member_remove_if_t
template<typename Set, typename Fn>
Initial value:
decltype(std::declval().remove_if(std::declval()))
Definition at line 24 of file SetOperations.h.
◆ check_ostream
Initial value:
decltype(std::declval<std::ostream &>() << std::declval())
Definition at line 22 of file StringMapEntry.h.
◆ cmpResult
◆ decay_if_c_char_array_t
◆ DenseSet
template<typename ValueT, typename ValueInfoT>
Initial value:
ValueInfoT>
Base class for DenseSet and DenseSmallSet.
Definition at line 264 of file DenseSet.h.
◆ detect_has_hoist_check
◆ EnableIfCallable
template<typename CallableT, typename Ret, typename... Params>
Initial value:
std::enable_if_t<std::disjunction<
std::is_void,
std::is_same<decltype(std::declval()(std::declval()...)),
Ret>,
std::is_same<const decltype(std::declval()(
std::declval()...)),
Ret>,
std::is_convertible<decltype(std::declval()(
std::declval()...)),
Ret>>::value>
const char unit< Period >::value[]
Definition at line 64 of file FunctionExtras.h.
◆ EnableUnlessSameType
template<typename CallableT, typename ThisT>
Initial value:
std::enable_if_t<!std::is_same<remove_cvref_t, ThisT>::value>
Definition at line 61 of file FunctionExtras.h.
◆ EnumeratorTupleType
template<typename... Iters>
◆ ExponentType
◆ fltCategory
◆ fwd_or_bidi_tag
Initial value:
std::conditional_t<
std::is_base_of_v<std::bidirectional_iterator_tag,
typename std::iterator_traits::iterator_category>,
std::bidirectional_iterator_tag, std::forward_iterator_tag>
A type alias which is std::bidirectional_iterator_tag if the category of IterT derives from it, and std::forward_iterator_tag otherwise.
Definition at line 527 of file STLExtras.h.
◆ has_array
template<typename... Types>
◆ has_blob
template<typename... Types>
◆ has_hoist_check
template
using llvm::detail::has_hoist_check = decltype(&BlockT::isLegalToHoistInto)
◆ has_number_t
Initial value:
typename GraphType::UnknownGraphTypeError NodeRef
Definition at line 100 of file GraphTraits.h.
◆ has_sizeof
template<typename T>
using llvm::detail::has_sizeof = decltype(sizeof(T))
◆ integerPart
◆ IterOfRange
template
Definition at line 126 of file ADL.h.
◆ opStatus
◆ roundingMode
◆ SelfType
template<typename OptionalDerived, typename Default>
Initial value:
std::conditional_t<std::is_same_v<OptionalDerived, void>,
@ Default
The result values are uniform if and only if all operands are uniform.
A helper to derive the type to use with Self for cast traits, when the provided CRTP derived type is allowed to be void.
Definition at line 321 of file Casting.h.
◆ SmallDenseSet
template<typename ValueT, unsigned InlineBuckets, typename ValueInfoT>
◆ sort_trivially_copyable
Initial value:
std::conjunction<
std::is_pointer,
std::is_trivially_copyable<typename std::iterator_traits::value_type>>
Definition at line 1626 of file STLExtras.h.
◆ uninitializedTag
◆ ValueOfRange
template
Initial value:
std::remove_reference_t<decltype(*adl_begin(std::declval<RangeT &>()))>
Definition at line 129 of file ADL.h.
◆ zip_traits
template<typename ZipType, typename ReferenceTupleType, typename... Iters>
Initial value:
ZipType,
std::common_type_t<
std::bidirectional_iterator_tag,
typename std::iterator_traits::iterator_category...>,
ReferenceTupleType,
typename std::iterator_traits<
std::tuple_element_t<0, std::tuple<Iters...>>>::difference_type,
ReferenceTupleType *, ReferenceTupleType>
CRTP base class which implements the entire standard iterator facade in terms of a minimal subset of ...
Definition at line 661 of file STLExtras.h.
◆ abs()
◆ all_of_zip_predicate_first()
template<typename Predicate, typename... Args>
| bool llvm::detail::all_of_zip_predicate_first | ( | Predicate && | P, |
|---|---|---|---|
| Args &&... | args ) |
◆ all_of_zip_predicate_last()
template<typename... ArgsThenPredicate, size_t... InputIndexes>
| bool llvm::detail::all_of_zip_predicate_last | ( | std::tuple< ArgsThenPredicate... > | argsThenPredicate, |
|---|---|---|---|
| std::index_sequence< InputIndexes... > | ) |
◆ canTypeFitValue()
template<typename T, typename U>
| bool llvm::detail::canTypeFitValue | ( | const U | Value | ) |
|---|
◆ castToVPIRMetadata()
template<typename DstTy, typename RecipeBasePtrTy>
| auto llvm::detail::castToVPIRMetadata ( RecipeBasePtrTy R) -> DstTy | inlinestatic |
|---|
◆ ceilDiv()
◆ combineHashValue()
Simplistic combination of 32-bit hash values into 32-bit hash values.
Definition at line 41 of file DenseMapInfo.h.
References llvm::densemap::detail::mix().
Referenced by llvm::ScalarEvolution::FoldID::computeHash(), ReachabilityQueryInfo< ToTy >::computeHashValue(), llvm::DenseMapInfo< AA::RangeTy >::getHashValue(), llvm::DenseMapInfo< BoUpSLP::EdgeInfo >::getHashValue(), llvm::DenseMapInfo< MBBSectionID >::getHashValue(), llvm::DenseMapInfo< std::optional< T > >::getHashValue(), llvm::DenseMapInfo< std::pair< const MCSymbol *, PPCMCExpr::Specifier > >::getHashValue(), llvm::DenseMapInfo< std::pair< T, U > >::getHashValue(), llvm::DenseMapInfo< VersionTuple >::getHashValue(), llvm::DenseMapInfo< std::tuple< Ts... > >::getHashValueImpl(), and llvm::DenseMapInfo< std::pair< T, U > >::getHashValuePiecewise().
◆ deref_or_none()
template
| auto llvm::detail::deref_or_none | ( | const Iter & | I, |
|---|---|---|---|
| const Iter & | End ) -> std::optional< std::remove_const_t<std::remove_reference_t<decltype(*I)>>> |
◆ emitOps() [1/2]
template
◆ emitOps() [2/2]
template<typename FieldTy, typename Next, typename... Rest>
◆ fastTwoSum()
◆ floorDiv()
◆ frexp() [1/3]
Definition at line 5843 of file APFloat.cpp.
References abs(), assert(), llvm::APFloatBase::fcNormal, llvm::First, llvm::detail::DoubleAPFloat::getCategory(), llvm::detail::DoubleAPFloat::getFirst(), llvm::detail::DoubleAPFloat::getSecond(), llvm::harrisonUlp(), llvm::Hi, llvm::APFloatBase::IEK_Inf, llvm::APFloatBase::IEK_NaN, llvm::APFloatBase::IEK_Zero, ilogb(), llvm::APFloat::isNegative(), llvm::detail::DoubleAPFloat::isNegative(), llvm::APFloat::isZero(), llvm::Lo, llvm::APFloat::next(), llvm::APFloatBase::PPCDoubleDouble(), llvm::Quiet, rmNearestTiesToAway, rmNearestTiesToEven, rmTowardNegative, rmTowardPositive, rmTowardZero, and scalbn().
◆ frexp() [2/3]
Definition at line 5843 of file APFloat.cpp.
References abs(), assert(), llvm::APFloatBase::fcNormal, llvm::First, llvm::detail::DoubleAPFloat::getCategory(), llvm::detail::DoubleAPFloat::getFirst(), llvm::detail::DoubleAPFloat::getSecond(), llvm::harrisonUlp(), llvm::Hi, llvm::APFloatBase::IEK_Inf, llvm::APFloatBase::IEK_NaN, llvm::APFloatBase::IEK_Zero, ilogb(), llvm::APFloat::isNegative(), llvm::detail::DoubleAPFloat::isNegative(), llvm::APFloat::isZero(), llvm::Lo, llvm::APFloat::next(), llvm::APFloatBase::PPCDoubleDouble(), llvm::Quiet, rmNearestTiesToAway, rmNearestTiesToEven, rmTowardNegative, rmTowardPositive, rmTowardZero, and scalbn().
◆ frexp() [3/3]
◆ gcd()
◆ getAnalysisResult()
template<typename PassT, typename IRUnitT, typename... AnalysisArgTs, typename... MainArgTs>
| PassT::Result llvm::detail::getAnalysisResult | ( | AnalysisManager< IRUnitT, AnalysisArgTs... > & | AM, |
|---|---|---|---|
| IRUnitT & | IR, | ||
| std::tuple< MainArgTs... > | Args ) |
◆ getAnalysisResultUnpackTuple()
template<typename PassT, typename IRUnitT, typename AnalysisManagerT, typename... ArgTs, size_t... Ns>
| PassT::Result llvm::detail::getAnalysisResultUnpackTuple | ( | AnalysisManagerT & | AM, |
|---|---|---|---|
| IRUnitT & | IR, | ||
| std::tuple< ArgTs... > | Args, | ||
| std::index_sequence< Ns... > | ) |
Actual unpacker of extra arguments in getAnalysisResult, passes only those tuple arguments that are mentioned in index_sequence.
Definition at line 122 of file PassManager.h.
References IR.
Referenced by getAnalysisResult().
◆ hash_value() [1/3]
◆ hash_value() [2/3]
Note that the use of hash codes for floating point values is in general frought with peril. Equality is hard to define for these values. For example, should negative and positive zero hash to different codes? Are they equal or not? This hash value implementation specifically emphasizes producing different codes for different inputs in order to be used in canonicalization and memoization. As such, equality is bitwiseIsEqual, and 0 != -0.
Definition at line 3471 of file APFloat.cpp.
Referenced by llvm::detail::DoubleAPFloat::hash_value, hash_value(), and llvm::hash_value().
◆ hash_value() [3/3]
◆ ilogb() [1/2]
◆ ilogb() [2/2]
◆ isLegalToHoistInto()
template
| bool llvm::detail::isLegalToHoistInto | ( | BlockT * | Block | ) |
|---|
◆ isPresent()
template<typename T>
| bool llvm::detail::isPresent ( const T & t) | inline |
|---|
Definition at line 623 of file Casting.h.
References llvm::simplify_type< From >::getSimplifiedValue(), isPresent(), and T.
Referenced by llvm::cast_if_present(), llvm::cast_if_present(), llvm::cast_if_present(), llvm::cast_if_present(), llvm::dyn_cast(), llvm::dyn_cast(), llvm::dyn_cast(), llvm::dyn_cast(), llvm::dyn_cast_if_present(), llvm::dyn_cast_if_present(), llvm::dyn_cast_if_present(), llvm::isa_and_present(), and isPresent().
◆ join_impl() [1/2]
template
| std::string llvm::detail::join_impl ( IteratorT Begin, IteratorT End, StringRef Separator, std::forward_iterator_tag ) | inline |
|---|
◆ join_impl() [2/2]
template
| std::string llvm::detail::join_impl ( IteratorT Begin, IteratorT End, StringRef Separator, std::input_iterator_tag ) | inline |
|---|
◆ join_items_impl() [1/3]
template
| void llvm::detail::join_items_impl ( std::string & Result, Sep Separator ) | inline |
|---|
◆ join_items_impl() [2/3]
template<typename Sep, typename Arg>
| void llvm::detail::join_items_impl ( std::string & Result, Sep Separator, const Arg & Item ) | inline |
|---|
◆ join_items_impl() [3/3]
template<typename Sep, typename Arg1, typename... Args>
| void llvm::detail::join_items_impl ( std::string & Result, Sep Separator, const Arg1 & A1, Args &&... Items ) | inline |
|---|
◆ join_items_size()
template<typename... Args>
| size_t llvm::detail::join_items_size ( Args &&... Items) | inline |
|---|
◆ join_one_item_size() [1/3]
| size_t llvm::detail::join_one_item_size ( char ) | inline |
|---|
◆ join_one_item_size() [2/3]
| size_t llvm::detail::join_one_item_size ( const char * S) | inline |
|---|
◆ join_one_item_size() [3/3]
template<typename T>
| size_t llvm::detail::join_one_item_size ( const T & Str) | inline |
|---|
◆ lcm()
◆ mod()
Returns the remainder of dividing LHS by RHS.
is always non-negative.
The RHS is always expected to be positive, and the result is always non-negative.
Definition at line 211 of file SlowDynamicAPInt.cpp.
References assert().
◆ next_or_end()
template
| Iter llvm::detail::next_or_end | ( | const Iter & | I, |
|---|---|---|---|
| const Iter & | End ) |
◆ operator!=() [1/4]
template<typename ValueT, typename MapTy, typename ValueInfoT>
Inequality comparison for DenseSet.
Equivalent to !(LHS == RHS). See operator== for performance notes.
Definition at line 258 of file DenseSet.h.
◆ operator!=() [2/4]
template<typename OtherT, typename DerivedT, typename BaseT, typename T, typename PointerT, typename ReferenceT>
◆ operator!=() [3/4]
◆ operator!=() [4/4]
◆ operator%() [1/2]
◆ operator%() [2/2]
◆ operator%=()
◆ operator*() [1/2]
◆ operator*() [2/2]
◆ operator*=()
◆ operator+() [1/2]
◆ operator+() [2/2]
◆ operator+=()
Convenience operator overloads for int64_t.
Convenience operator overloads for int64_t.
Definition at line 33 of file SlowDynamicAPInt.cpp.
◆ operator-() [1/2]
◆ operator-() [2/2]
◆ operator-=()
◆ operator/() [1/2]
◆ operator/() [2/2]
◆ operator/=()
◆ operator<() [1/2]
◆ operator<() [2/2]
◆ operator<<()
◆ operator<=() [1/2]
◆ operator<=() [2/2]
◆ operator==() [1/4]
template<typename ValueT, typename MapTy, typename ValueInfoT>
Equality comparison for DenseSet.
Iterates over elements of LHS confirming that each element is also a member of RHS, and that RHS contains no additional values. Equivalent to N calls to RHS.count. Amortized complexity is linear, worst case is O(N^2) (if every hash collides).
Definition at line 241 of file DenseSet.h.
◆ operator==() [2/4]
template<typename OtherT, typename DerivedT, typename BaseT, typename T, typename PointerT, typename ReferenceT>
Compare this range with another.
FIXME: Make me a member function instead of friend when it works in C++20.
Definition at line 1325 of file STLExtras.h.
References T.
◆ operator==() [3/4]
◆ operator==() [4/4]
◆ operator>() [1/2]
◆ operator>() [2/2]
◆ operator>=() [1/2]
◆ operator>=() [2/2]
◆ printBumpPtrAllocatorStats()
| void llvm::detail::printBumpPtrAllocatorStats | ( | unsigned | NumSlabs, |
|---|---|---|---|
| size_t | BytesAllocated, | ||
| size_t | TotalMemory ) |
◆ PrintTo() [1/2]
◆ PrintTo() [2/2]
◆ resolveReferencedType() [1/2]
template
| DieType llvm::detail::resolveReferencedType | ( | DieType | D, |
|---|---|---|---|
| dwarf::Attribute | Attr = dwarf::DW_AT_type ) |
◆ resolveReferencedType() [2/2]
template
| DieType llvm::detail::resolveReferencedType | ( | DieType | D, |
|---|---|---|---|
| typename DieType::DWARFFormValue | F ) |
◆ reverse_if()
| auto llvm::detail::reverse_if | ( | Range && | R | ) |
|---|
◆ reverse_if_helper() [1/2]
template<typename Range>
| auto llvm::detail::reverse_if_helper | ( | Range && | R, |
|---|---|---|---|
| std::bool_constant< false > | ) |
◆ reverse_if_helper() [2/2]
template<typename Range>
| auto llvm::detail::reverse_if_helper | ( | Range && | R, |
|---|---|---|---|
| std::bool_constant< true > | ) |
◆ scalbn() [1/3]
◆ scalbn() [2/3]
◆ scalbn() [3/3]
◆ set_intersects_impl()
template<class S1Ty, class S2Ty>
| bool llvm::detail::set_intersects_impl | ( | const S1Ty & | S1, |
|---|---|---|---|
| const S2Ty & | S2 ) |
◆ TakeError()
◆ TakeExpected() [1/2]
◆ TakeExpected() [2/2]
◆ tcSetLeastSignificantBits()
◆ to_float()
◆ toString()
template
| const char * llvm::detail::toString | ( | std::optional< DWARFFormValueType > | F | ) |
|---|
◆ unwrapReferencedTypedefType()
template
| DieType llvm::detail::unwrapReferencedTypedefType | ( | DieType | D | ) |
|---|
◆ unwrapValue()
template<typename T>
| decltype(auto) llvm::detail::unwrapValue ( T & t) | inline |
|---|
◆ cmpEqual
| cmpResult llvm::detail::cmpEqual = APFloatBase::cmpEqual | staticconstexpr |
|---|
◆ cmpGreaterThan
| cmpResult llvm::detail::cmpGreaterThan = APFloatBase::cmpGreaterThan | staticconstexpr |
|---|
◆ cmpLessThan
| cmpResult llvm::detail::cmpLessThan = APFloatBase::cmpLessThan | staticconstexpr |
|---|
◆ cmpUnordered
| cmpResult llvm::detail::cmpUnordered = APFloatBase::cmpUnordered | staticconstexpr |
|---|
◆ fcInfinity
| fltCategory llvm::detail::fcInfinity = APFloatBase::fcInfinity | staticconstexpr |
|---|
◆ fcNaN
Definition at line 441 of file APFloat.h.
Referenced by llvm::detail::IEEEFloat::compare(), llvm::detail::IEEEFloat::convert(), llvm::detail::IEEEFloat::convertToHexString(), llvm::detail::DoubleAPFloat::convertToInteger(), llvm::detail::IEEEFloat::convertToInteger(), llvm::detail::IEEEFloat::isNaN(), llvm::detail::IEEEFloat::makeNaN(), llvm::detail::DoubleAPFloat::multiply(), llvm::detail::DoubleAPFloat::next(), llvm::detail::IEEEFloat::next(), and llvm::detail::IEEEFloat::toString().
◆ fcNormal
| fltCategory llvm::detail::fcNormal = APFloatBase::fcNormal | staticconstexpr |
|---|
Definition at line 442 of file APFloat.h.
Referenced by llvm::detail::IEEEFloat::compare(), llvm::detail::IEEEFloat::convertToHexString(), llvm::detail::IEEEFloat::IEEEFloat(), llvm::detail::DoubleAPFloat::ilogb, llvm::detail::DoubleAPFloat::isDenormal(), llvm::detail::DoubleAPFloat::isLargest(), llvm::detail::DoubleAPFloat::isSmallest(), llvm::detail::DoubleAPFloat::isSmallestNormalized(), llvm::detail::IEEEFloat::isSmallestNormalized(), llvm::detail::IEEEFloat::makeLargest(), llvm::detail::IEEEFloat::makeSmallest(), llvm::detail::IEEEFloat::makeSmallestNormalized(), llvm::detail::DoubleAPFloat::multiply(), llvm::detail::DoubleAPFloat::next(), llvm::detail::IEEEFloat::next(), and llvm::detail::IEEEFloat::toString().
◆ fcZero
◆ HasFreeFunctionRBegin
template<typename Range>
| bool llvm::detail::HasFreeFunctionRBegin | staticconstexpr |
|---|
Initial value:
=
typename detail::detector< void, Op, Args... >::value_t is_detected
Detects if a given trait holds for some set of arguments 'Args'.
Definition at line 400 of file STLExtras.h.
Referenced by llvm::reverse().
◆ HasFreeFunctionSize
template<typename Range>
| bool llvm::detail::HasFreeFunctionSize | staticconstexpr |
|---|
◆ HasMemberContains
template<typename Range, typename Element>
| bool llvm::detail::HasMemberContains | staticconstexpr |
|---|
◆ HasMemberEraseIter
template
| bool llvm::detail::HasMemberEraseIter | staticconstexpr |
|---|
◆ HasMemberFind
template<typename Range, typename Element>
| bool llvm::detail::HasMemberFind | staticconstexpr |
|---|
◆ HasMemberRemoveIf
template<typename Set, typename Fn>
| bool llvm::detail::HasMemberRemoveIf | staticconstexpr |
|---|
◆ integerPartWidth
| unsigned llvm::detail::integerPartWidth = APFloatBase::integerPartWidth | staticconstexpr |
|---|
◆ opDivByZero
| opStatus llvm::detail::opDivByZero = APFloatBase::opDivByZero | staticconstexpr |
|---|
◆ opInexact
| opStatus llvm::detail::opInexact = APFloatBase::opInexact | staticconstexpr |
|---|
◆ opInvalidOp
| opStatus llvm::detail::opInvalidOp = APFloatBase::opInvalidOp | staticconstexpr |
|---|
◆ opOK
| opStatus llvm::detail::opOK = APFloatBase::opOK | staticconstexpr |
|---|
◆ opOverflow
| opStatus llvm::detail::opOverflow = APFloatBase::opOverflow | staticconstexpr |
|---|
◆ opUnderflow
| opStatus llvm::detail::opUnderflow = APFloatBase::opUnderflow | staticconstexpr |
|---|
◆ rmNearestTiesToAway
◆ rmNearestTiesToEven
◆ rmTowardNegative
| roundingMode llvm::detail::rmTowardNegative = APFloatBase::rmTowardNegative | staticconstexpr |
|---|
◆ rmTowardPositive
| roundingMode llvm::detail::rmTowardPositive = APFloatBase::rmTowardPositive | staticconstexpr |
|---|
◆ rmTowardZero
| roundingMode llvm::detail::rmTowardZero = APFloatBase::rmTowardZero | staticconstexpr |
|---|
◆ uninitialized
◆ unit< Period >::value
template