Index: docs/LangRef.rst =================================================================== --- docs/LangRef.rst +++ docs/LangRef.rst @@ -11471,13 +11471,22 @@ 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. +NaN only if both operands are NaN. The returned NaN is always +quiet. 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 NaN inputs. 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 +correctly return the non-NaN input (e.g. by using the equivalent of +``llvm.canonicalize``). + '``llvm.maxnum.*``' Intrinsic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -11512,13 +11521,21 @@ 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. +NaN only if both operands are NaN. The returned NaN is always +quiet. 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 NaN inputs. 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 +correctly return the non-NaN input (e.g. by using the equivalent of +``llvm.canonicalize``). '``llvm.copysign.*``' Intrinsic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^