[PATCH] D15385: [Support] Add saturating multiply-add support function
Nathan Slingerland via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 10 10:17:38 PST 2015
slingn marked 2 inline comments as done.
================
Comment at: include/llvm/Support/MathExtras.h:727
@@ +726,3 @@
+typename std::enable_if<std::is_unsigned<T>::value, T>::type
+SaturatingMultiplyAdd(T X, T Y, T A, bool *ResultOverflowed = nullptr) {
+ bool Dummy;
----------------
davidxl wrote:
> Do we want types of X and Y to be same ? For instance, the weight can be less than 1.
>
> Also we may want to have an overloaded function that is used for common cases where one of the X or Y is constant:
>
> template <typename T, uint64_t Multiplier>
> typename std::enable_if<std::is_unsigned<T>::value, T>::type SaturatingMultiplyAdd(T X, T A, bool *ResultOverflowed = nullptr) {
> ...
> }
>
> it is probably just slightly more efficient so probably not in this patch.
X and Y are the multiplicands. Why would they need to be different types for just the unsigned arithmetic case? I guess the addend (A) could usefully be a negative number but that's inconsistent with SaturatingAdd() as it is currently defined.
The pending weighted profile change (D15306) doesn't support weight < 1.
http://reviews.llvm.org/D15385
More information about the llvm-commits
mailing list