[llvm] clarify NaN propagation in fptrunc (PR #68554)

Ralf Jung via llvm-commits llvm-commits at lists.llvm.org
Sun Oct 8 23:00:48 PDT 2023


https://github.com/RalfJung created https://github.com/llvm/llvm-project/pull/68554

Follow-up to https://github.com/llvm/llvm-project/pull/66579: while implementing those semantics in Miri I realized there's a special case to be considered in truncating float casts.

Cc @nunoplopes @nikic @jyknight @jcranmer-intel 

>From b7c584eaa0864589f5c73adba5469686dc110372 Mon Sep 17 00:00:00 2001
From: Ralf Jung <post at ralfj.de>
Date: Mon, 9 Oct 2023 07:58:23 +0200
Subject: [PATCH] clarify NaN propagation in fptrunc

---
 llvm/docs/LangRef.rst | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst
index 1883e9f6290b151..e27d4e0ed695319 100644
--- a/llvm/docs/LangRef.rst
+++ b/llvm/docs/LangRef.rst
@@ -11311,7 +11311,10 @@ environment <floatenv>`.
 NaN values follow the usual :ref:`NaN behaviors <floatnan>`, except that _if_ a
 NaN payload is propagated from the input ("Quieting NaN propagation" or
 "Unchanged NaN propagation" cases), then the low order bits of the NaN payload
-which cannot fit in the resulting type are discarded.
+which cannot fit in the resulting type are discarded. Note that if discarding
+the low order bits leads to an all-0 payload, this cannot be represented as a
+signaling NaN (it would represent an infinity instead), so in that case
+"Unchanged NaN propagation" is not possible.
 
 Example:
 """"""""



More information about the llvm-commits mailing list