[PATCH] D134859: [clang][Interp] Implement basic support for floating point values
Joshua Cranmer via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 6 07:56:18 PDT 2022
jcranmer-intel added inline comments.
================
Comment at: clang/lib/AST/Interp/Floating.h:33-34
+ /// Primitive representing limits.
+ // static constexpr auto Min = std::numeric_limits<float>::min();
+ // static constexpr auto Max = std::numeric_limits<float>::max();
+
----------------
tbaeder wrote:
> This is currently commented out, but I //think// I can get the semantics of the `APFloat` and ask its semantics for min/max values.
`APFloat::get{Largest,Smallest}` will do the trick.
================
Comment at: clang/lib/AST/Interp/Floating.h:89
+ bool isMin() const { return false; } // TODO
+ bool isMinusOne() const { return F == APFloat(-1.0f); }
+ bool isNan() const { return F.isNaN(); }
----------------
FYI, `operator==` on `APFloat` requires the two types to have the same semantics. Probably the fastest way to check if it's -1 is either `ilogb(F) == 0 && F.isNegative()` or `F.isExactlyValue(-1.0)`.
================
Comment at: clang/lib/AST/Interp/Interp.cpp:421
+bool CastFP(InterpState &S, CodePtr OpPC, const llvm::fltSemantics *Sem) {
+ Floating F = S.Stk.pop<Floating>();
----------------
FWIW, `const llvm::fltSemantics &` is the usual way it's used.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D134859/new/
https://reviews.llvm.org/D134859
More information about the cfe-commits
mailing list