[llvm] [NVPTX] Respect FTZ flag when lowering atomicrmw fadd. (PR #200732)

Justin Lebar via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 3 07:47:21 PDT 2026


================
@@ -54,9 +54,16 @@
 """
 )
 
+# atomicrmw fadd's lowering depends on the function's FTZ (denormal) mode, so we
+# check codegen both with and without it. Lines common to both runs collapse to
+# the SM${sm} prefix; only the FTZ-sensitive ops diverge into SM${sm}-NOFTZ /
+# SM${sm}-FTZ. (-nvptx-allow-ftz-atomics is covered separately in
+# atomicrmw-allow-ftz-atomics.ll.)
 run_statement = Template(
-    """; RUN: llc < %s -march=nvptx64 -mcpu=sm_${sm} -mattr=+ptx${ptx} | FileCheck %s --check-prefix=SM${sm}
+    """; RUN: llc < %s -march=nvptx64 -mcpu=sm_${sm} -mattr=+ptx${ptx} | FileCheck %s --check-prefixes=SM${sm},SM${sm}-NOFTZ
+; RUN: llc < %s -march=nvptx64 -mcpu=sm_${sm} -mattr=+ptx${ptx} -denormal-fp-math-f32=preserve-sign | FileCheck %s --check-prefixes=SM${sm},SM${sm}-FTZ
 ; RUN: %if ptxas-sm_${sm} && ptxas-isa-${ptxfp} %{ llc < %s -march=nvptx64 -mcpu=sm_${sm} -mattr=+ptx${ptx} | %ptxas-verify -arch=sm_${sm} %}
+; RUN: %if ptxas-sm_${sm} && ptxas-isa-${ptxfp} %{ llc < %s -march=nvptx64 -mcpu=sm_${sm} -mattr=+ptx${ptx} -denormal-fp-math-f32=preserve-sign | %ptxas-verify -arch=sm_${sm} %}
----------------
jlebar wrote:

> What are the semantics of clang's -denormal-fp-math-f32=preserve-sign?

clang's `-fdenormal-fp-math-f32` flag sets the LLVM attribute `denormal_fpenv(float: preservesign)` on every function in the module.

The semantics of `denormal_fpenv(float: preservesign)` are described in the LLVM langref.

> If the answer is not "both" then the codegen above may be incorrect (min.ftz.f32 flushes both inputs and outputs to sign-preserved-zero).

My reading of the langref is that it requires both.  Please let me know if your reading is different!

https://github.com/llvm/llvm-project/pull/200732


More information about the llvm-commits mailing list