[llvm] [RISCV] Implement load/store support for XAndesBFHCvt (PR #150350)

Jim Lin via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 23 23:39:28 PDT 2025


================
@@ -21,3 +25,47 @@ define bfloat @fcvt_bf16_s(float %a) nounwind {
   %1 = fptrunc float %a to bfloat
   ret bfloat %1
 }
+
+ at sf = dso_local global float 0.000000e+00, align 4
+ at bf = dso_local global bfloat 0xR0000, align 2
+
+; Check load and store to bf16.
+define void @loadstorebf16() nounwind {
+; XANDESBFHCVT-LABEL: loadstorebf16:
+; XANDESBFHCVT:       # %bb.0: # %entry
+; XANDESBFHCVT-NEXT:    lui a0, %hi(.L_MergedGlobals)
+; XANDESBFHCVT-NEXT:    lhu a1, %lo(.L_MergedGlobals)(a0)
+; XANDESBFHCVT-NEXT:    lui a2, 1048560
+; XANDESBFHCVT-NEXT:    or a1, a1, a2
+; XANDESBFHCVT-NEXT:    fmv.w.x fa5, a1
+; XANDESBFHCVT-NEXT:    addi a1, a0, %lo(.L_MergedGlobals)
+; XANDESBFHCVT-NEXT:    nds.fcvt.s.bf16 fa5, fa5
+; XANDESBFHCVT-NEXT:    fsw fa5, 4(a1)
+; XANDESBFHCVT-NEXT:    flw fa5, 4(a1)
+; XANDESBFHCVT-NEXT:    nds.fcvt.bf16.s fa5, fa5
+; XANDESBFHCVT-NEXT:    fmv.x.w a1, fa5
+; XANDESBFHCVT-NEXT:    sh a1, %lo(.L_MergedGlobals)(a0)
+; XANDESBFHCVT-NEXT:    ret
+;
+; ZFH-LABEL: loadstorebf16:
+; ZFH:       # %bb.0: # %entry
+; ZFH-NEXT:    lui a0, %hi(.L_MergedGlobals)
+; ZFH-NEXT:    flh fa5, %lo(.L_MergedGlobals)(a0)
+; ZFH-NEXT:    addi a1, a0, %lo(.L_MergedGlobals)
+; ZFH-NEXT:    nds.fcvt.s.bf16 fa5, fa5
+; ZFH-NEXT:    fsw fa5, 4(a1)
+; ZFH-NEXT:    flw fa5, 4(a1)
+; ZFH-NEXT:    nds.fcvt.bf16.s fa5, fa5
+; ZFH-NEXT:    fsh fa5, %lo(.L_MergedGlobals)(a0)
+; ZFH-NEXT:    ret
+entry:
+  %0 = load bfloat, bfloat* @bf, align 2
----------------
tclin914 wrote:

Use the ptrs passed from argument. Thanks.

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


More information about the llvm-commits mailing list