[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