[PATCH] D134859: [clang][Interp] Implement basic support for floating point values
Aaron Ballman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 30 11:22:05 PDT 2022
aaron.ballman added a reviewer: jcranmer-intel.
aaron.ballman added a subscriber: jcranmer-intel.
aaron.ballman added a comment.
I've not given this a full review yet, but I do have some comments on a partial review. Mostly, I'm concerned we're going to have different semantics when evaluating than we'd get if the evaluation happened at runtime because we're using the host floating-point environment and not the target. I'm also a bit concerned the design won't extend very easily to `long double` support. We don't have to solve all of this with the initial offering, but I think we want to be sure we're building the float support on a stable base.
Adding @jcranmer-intel for another set of eyes on this code from someone who knows many of the most terrifying parts of floating-point support.
================
Comment at: clang/lib/AST/Interp/ByteCodeExprGen.cpp:161
+
+ return this->emitConstFloat32(E->getValue().convertToFloat(), E);
+}
----------------
Is there a reason you want to convert to the host `float` format here instead of passing along the `APFloat` object so semantics follow the target?
================
Comment at: clang/lib/AST/Interp/Floating.h:27-29
+ template <unsigned ReprBits> struct Repr;
+ template <> struct Repr<32> { using Type = float; };
+ template <> struct Repr<64> { using Type = double; };
----------------
Er, how will this extend to `long double` where the number of bits is rather more difficult?
================
Comment at: clang/lib/AST/Interp/Floating.h:74-79
+ bool isNegative() const { return V < 0; }
+ bool isPositive() const { return V >= 0; }
+ bool isZero() const { return V == 0; }
+ bool isMin() const { return V == Min; }
+ bool isMinusOne() const { return V == -1; }
+ bool isNan() const { return V != V; }
----------------
Hmm, this is making my spidey senses tingle. For example, negative zero should be negative, but `<` won't help you with that: https://godbolt.org/z/xonxqPv5r (and it definitely won't help for negative inf or a signed NaN).
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D134859/new/
https://reviews.llvm.org/D134859
More information about the cfe-commits
mailing list