[PATCH] D48661: [Fixed Point Arithmetic] Fixed Point Constant
John McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 27 11:05:49 PDT 2018
rjmccall added inline comments.
================
Comment at: include/clang/Basic/FixedPoint.h:11
+/// \file
+/// Defines the fixed point number interface.
+//
----------------
Referencing the standard here would be good, and maybe even excerpting the key parts.
================
Comment at: include/clang/Basic/FixedPoint.h:23
+
+class FixedPointNumber {
+ public:
----------------
The established naming convention here — as seen in `APInt`, `APFloat`, `APValue`, etc. — would call this `APFixedPoint`. Maybe that's not a great convention, but we should at least discuss deviating from it.
You might also want a type which encapsulates the details of a fixed-point type, i.e. the semantic width, scale, and saturating-ness. (Like the "float semantics" of `APFloat`.)
I think a key question here is whether you want a FixedPointNumber to exactly represent the bit-pattern or just the semantic value. I think it would eliminate a non-trivial source of bugs in this type if it just represents the semantic value, i.e. if a 16-bit unsigned fract value on a target where that uses a padded representation did not explicitly represent the padding bit, and then just added it back in in some accessor that asks for the bit-pattern. Regardless, that should be clearly documented.
================
Comment at: include/clang/Basic/FixedPoint.h:26
+ FixedPointNumber(const llvm::APSInt &Val, unsigned Scale,
+ bool Saturated = false)
+ : Val_(Val), Scale_(Scale), Saturated_(Saturated) {}
----------------
This probably shouldn't be optional, since it's a really important semantic aspect of the type whether it's saturating or not.
================
Comment at: include/clang/Basic/FixedPoint.h:83
+ unsigned Scale_;
+ bool Saturated_;
+};
----------------
LLVM convention does not include the trailing underscore; they're just capitalized. No, I don't like it, either.
================
Comment at: include/clang/Basic/TargetInfo.h:318
+ /// Return true if unsigned fixed point types have padding for this target.
+ /// False otherwise.
+ bool unsignedFixedPointTypesHavePadding() const { return SameFBits; }
----------------
You can cut "false otherwise".
================
Comment at: include/clang/Basic/TargetInfo.h:319
+ /// False otherwise.
+ bool unsignedFixedPointTypesHavePadding() const { return SameFBits; }
+
----------------
The convention is that predicates like this start with a verb, so this should be something like `doUnsignedFixedPointTypesHavePadding`.
================
Comment at: lib/AST/ASTContext.cpp:10379
+ return 0;
+}
----------------
Please put at least the member functions on `FixedPointNumber` in their own `.cpp` file.
Repository:
rC Clang
https://reviews.llvm.org/D48661
More information about the cfe-commits
mailing list