[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