[PATCH] D111529: Specify Clang vector builtins.
Florian Hahn via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 12 05:56:24 PDT 2021
fhahn updated this revision to Diff 378992.
fhahn added a comment.
Try to be more precise about how the reduction steps are performed and replace _round and _rint by roundeven.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D111529/new/
https://reviews.llvm.org/D111529
Files:
clang/docs/LanguageExtensions.rst
Index: clang/docs/LanguageExtensions.rst
===================================================================
--- clang/docs/LanguageExtensions.rst
+++ clang/docs/LanguageExtensions.rst
@@ -506,6 +506,71 @@
If it's an extension (OpenCL) vector, it's only available in C and OpenCL C.
And it selects base on signedness of the condition operands (OpenCL v1.1 s6.3.9).
+Vector Builtins
+---------------
+
+In addition to the operators mentioned above, Clang provides a set of builtins
+to perform additional operations on certain scalar and vector types.
+
+Let ``T`` be one of the following types:
+
+* an integer type (as in C2x 6.2.5p19), but excluding enumerated types and _Bool
+* the standard floating types float or double
+* a half-precision floating point type, if one is supported on the target
+* a vector type.
+
+For scalar types, consider the operation applied to a vector with a single element.
+
+*Elementwise Builtins*
+
+Each builtin returns a vector equivalent to applying the specified operation
+elementwise to the input.
+
+Unless specified otherwise operation(±0) = ±0 and operation(±infinity) = ±infinity
+
+========================================= ================================================================ ==================================
+ Name Operation Supported element types
+========================================= ================================================================ ==================================
+ T __builtin_elementwise_abs(T x) return the absolute value of a number x integer and floating point types
+ T __builtin_elementwise_ceil(T x) return the smallest integral value greater than or equal to x floating point types
+ T __builtin_elementwise_floor(T x) return the largest integral value less than or equal to x floating point types
+ T __builtin_elementwise_roundeven(T x) round x to the nearest integer value in floating point format, floating point types
+ rounding halfway cases to even (that is, to the nearest value
+ that is an even integer), regardless of the current rounding
+ direction.
+ T__builtin_elementwise_trunc(T x) return the integral value nearest to but no larger in floating point types
+ magnitude than x
+ T __builtin_elementwise_max(T x, T y) return x or y, whichever is larger integer and floating point types
+ T __builtin_elementwise_min(T x, T y) return x or y, whichever is smaller integer and floating point types
+========================================= ================================================================ ==================================
+
+
+*Reduction Builtins*
+
+Each builtin returns a scalar equivalent to applying the specified
+operation(x, y) as pairwise tree reduction to the input. In each reduction step,
+the vector elements of the first vector are concatenated after the elements of
+the second vector. The result vector is created by reading pairs of adjacent
+elements from the concatenated vector, applying the operation to the pair and
+placing the result in the result vector.
+
+Let ``VT`` be a vector type and ``ET`` the element type of ``VT``.
+
+======================================= ================================================================ ==================================
+ Name Operation Supported element types
+======================================= ================================================================ ==================================
+ ET __builtin_reduce_max(VT a) return x or y, whichever is larger; If exactly one argument is integer and floating point types
+ a NaN, return the other argument. If both arguments are NaNs,
+ fmax() return a NaN.
+ ET __builtin_reduce_min(VT a) return x or y, whichever is smaller; If exactly one argument integer and floating point types
+ is a NaN, return the other argument. If both arguments are
+ NaNs, fmax() return a NaN.
+ ET __builtin_reduce_add(VT a) \+ integer and floating point types
+ ET __builtin_reduce_and(VT a) & integer types
+ ET __builtin_reduce_or(VT a) \| integer types
+ ET __builtin_reduce_xor(VT a) ^ integer types
+======================================= ================================================================ ==================================
+
Matrix Types
============
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D111529.378992.patch
Type: text/x-patch
Size: 5216 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211012/56e4f89f/attachment.bin>
More information about the cfe-commits
mailing list