[llvm] fix `bf16` to `i16` bitcast quieting NaNs (PR #224867)
Folkert de Vries via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 20 04:55:42 PDT 2026
================
@@ -419,6 +419,35 @@ define i16 @test_bitcast_bfloattoi16(bfloat %a) #0 {
ret i16 %r
}
+define void @test_bitcast_bfloattoi16_in_branch(bfloat %a, i1 %c, ptr %p) #0 {
+; CHECK-CVT-LABEL: test_bitcast_bfloattoi16_in_branch:
+; CHECK-CVT: @ %bb.0: @ %entry
+; CHECK-CVT-NEXT: tst r0, #1
+; CHECK-CVT-NEXT: vmovne r0, s0
+; CHECK-CVT-NEXT: strhne r0, [r1]
+; CHECK-CVT-NEXT: bx lr
+;
+; CHECK-BF16-LABEL: test_bitcast_bfloattoi16_in_branch:
+; CHECK-BF16: @ %bb.0: @ %entry
+; CHECK-BF16-NEXT: .pad #4
+; CHECK-BF16-NEXT: sub sp, sp, #4
+; CHECK-BF16-NEXT: vmov r2, s0
+; CHECK-BF16-NEXT: tst r0, #1
+; CHECK-BF16-NEXT: strh r2, [sp, #2]
+; CHECK-BF16-NEXT: ldrhne r0, [sp, #2]
+; CHECK-BF16-NEXT: strhne r0, [r1]
+; CHECK-BF16-NEXT: add sp, sp, #4
+; CHECK-BF16-NEXT: bx lr
+entry:
+ br i1 %c, label %bitcast, label %exit
+bitcast:
+ %b = bitcast bfloat %a to i16
+ store i16 %b, ptr %p
+ br label %exit
+exit:
+ ret void
+}
----------------
folkertdev wrote:
this slightly more complicated structure would trigger the bug even with higher optimization levels (though arm got it right even before this PR, but e.g. riscv did not https://llvm.godbolt.org/z/EszbdaGrv)
https://github.com/llvm/llvm-project/pull/224867
More information about the llvm-commits
mailing list