[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