65 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+xandesbfhcvt -target-abi ilp32f \3; RUN: -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,XANDESBFHCVT %s4; RUN: llc -mtriple=riscv32 -mattr=+zfh,+xandesbfhcvt -target-abi ilp32f \5; RUN: -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,ZFH %s6; RUN: llc -mtriple=riscv64 -mattr=+xandesbfhcvt -target-abi lp64f \7; RUN: -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,XANDESBFHCVT %s8; RUN: llc -mtriple=riscv64 -mattr=+zfh,+xandesbfhcvt -target-abi lp64f \9; RUN: -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,ZFH %s10 11define float @fcvt_s_bf16(bfloat %a) nounwind {12; CHECK-LABEL: fcvt_s_bf16:13; CHECK: # %bb.0:14; CHECK-NEXT: nds.fcvt.s.bf16 fa0, fa015; CHECK-NEXT: ret16 %1 = fpext bfloat %a to float17 ret float %118}19 20define bfloat @fcvt_bf16_s(float %a) nounwind {21; CHECK-LABEL: fcvt_bf16_s:22; CHECK: # %bb.0:23; CHECK-NEXT: nds.fcvt.bf16.s fa0, fa024; CHECK-NEXT: ret25 %1 = fptrunc float %a to bfloat26 ret bfloat %127}28 29; Check load and store to bf16.30define void @loadstorebf16(ptr %bf, ptr %sf) nounwind {31; XANDESBFHCVT-LABEL: loadstorebf16:32; XANDESBFHCVT: # %bb.0: # %entry33; XANDESBFHCVT-NEXT: lhu a2, 0(a0)34; XANDESBFHCVT-NEXT: lui a3, 104856035; XANDESBFHCVT-NEXT: or a2, a2, a336; XANDESBFHCVT-NEXT: fmv.w.x fa5, a237; XANDESBFHCVT-NEXT: nds.fcvt.s.bf16 fa5, fa538; XANDESBFHCVT-NEXT: fsw fa5, 0(a1)39; XANDESBFHCVT-NEXT: flw fa5, 0(a1)40; XANDESBFHCVT-NEXT: nds.fcvt.bf16.s fa5, fa541; XANDESBFHCVT-NEXT: fmv.x.w a1, fa542; XANDESBFHCVT-NEXT: sh a1, 0(a0)43; XANDESBFHCVT-NEXT: ret44;45; ZFH-LABEL: loadstorebf16:46; ZFH: # %bb.0: # %entry47; ZFH-NEXT: flh fa5, 0(a0)48; ZFH-NEXT: nds.fcvt.s.bf16 fa5, fa549; ZFH-NEXT: fsw fa5, 0(a1)50; ZFH-NEXT: flw fa5, 0(a1)51; ZFH-NEXT: nds.fcvt.bf16.s fa5, fa552; ZFH-NEXT: fsh fa5, 0(a0)53; ZFH-NEXT: ret54entry:55 %0 = load bfloat, bfloat* %bf, align 256 %1 = fpext bfloat %0 to float57 store volatile float %1, float* %sf, align 458 59 %2 = load float, float* %sf, align 460 %3 = fptrunc float %2 to bfloat61 store volatile bfloat %3, bfloat* %bf, align 262 63 ret void64}65