[PATCH] D49978: LangRef: Clarify expected sNaN behavior for minnum/maxnum
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 30 04:10:46 PDT 2018
arsenm created this revision.
arsenm added a reviewer: scanon.
Herald added a subscriber: wdng.
This matches the de-facto behavior based on constant folding
and the default lowering to fmin/fmax.
https://reviews.llvm.org/D49978
Files:
docs/LangRef.rst
Index: docs/LangRef.rst
===================================================================
--- docs/LangRef.rst
+++ docs/LangRef.rst
@@ -11471,14 +11471,20 @@
Semantics:
""""""""""
-Follows the IEEE-754 semantics for minNum, which also match for libm's
-fmin.
+Follows the IEEE-754 semantics for minNum, except for handling of
+signaling NaNs. This match's the behavior of libm's fmin.
If either operand is a NaN, returns the other non-NaN operand. Returns
NaN only if both operands are NaN. If the operands compare equal,
returns a value that compares equal to both operands. This means that
fmin(+/-0.0, +/-0.0) could return either -0.0 or 0.0.
+Unlike the IEEE-754 2008 behavior, this does not distinguish between
+signaling and quiet NaNs. If a target's implementation follows the
+standard and returns a quiet NaN if either input is a signaling NaN,
+the intrinsic lowering is responsible for quieting the inputs to get
+correct behavior (e.g. by using the equivalent of ``llvm.canonicalize``).
+
'``llvm.maxnum.*``' Intrinsic
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -11512,14 +11518,20 @@
Semantics:
""""""""""
-Follows the IEEE-754 semantics for maxNum, which also match for libm's
-fmax.
+Follows the IEEE-754 semantics for maxNum except for the handling of
+signaling NaNs. This matches the behavior of libm's fmax.
If either operand is a NaN, returns the other non-NaN operand. Returns
NaN only if both operands are NaN. If the operands compare equal,
returns a value that compares equal to both operands. This means that
fmax(+/-0.0, +/-0.0) could return either -0.0 or 0.0.
+Unlike the IEEE-754 2008 behavior, this does not distinguish between
+signaling and quiet NaNs. If a target's implementation follows the
+standard and returns a quiet NaN if either input is a signaling NaN,
+the intrinsic lowering is responsible for quieting the inputs to get
+correct behavior (e.g. by using the equivalent of ``llvm.canonicalize``).
+
'``llvm.copysign.*``' Intrinsic
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D49978.157940.patch
Type: text/x-patch
Size: 2032 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180730/49fa9d5c/attachment.bin>
More information about the llvm-commits
mailing list