1061e368fSAlex Bradbury; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2061e368fSAlex Bradbury; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s | FileCheck %s -check-prefix=RV32I-ILP32 3061e368fSAlex Bradbury; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s | FileCheck %s -check-prefix=RV64I-LP64 492912499SAlex Bradbury; RUN: llc -mtriple=riscv32 -mattr=+d -target-abi=ilp32 -verify-machineinstrs < %s | FileCheck %s -check-prefix=RV32ID-ILP32 592912499SAlex Bradbury; RUN: llc -mtriple=riscv64 -mattr=+d -target-abi=lp64 -verify-machineinstrs < %s | FileCheck %s -check-prefix=RV64ID-LP64 692912499SAlex Bradbury; RUN: llc -mtriple=riscv32 -mattr=+d -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s -check-prefix=RV32ID-ILP32D 792912499SAlex Bradbury; RUN: llc -mtriple=riscv64 -mattr=+d -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s -check-prefix=RV64ID-LP64D 8061e368fSAlex Bradbury 9061e368fSAlex Bradburydefine bfloat @float_to_bfloat(float %a) nounwind { 10061e368fSAlex Bradbury; RV32I-ILP32-LABEL: float_to_bfloat: 11061e368fSAlex Bradbury; RV32I-ILP32: # %bb.0: 12061e368fSAlex Bradbury; RV32I-ILP32-NEXT: addi sp, sp, -16 13061e368fSAlex Bradbury; RV32I-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 14eabaee0cSFangrui Song; RV32I-ILP32-NEXT: call __truncsfbf2 15061e368fSAlex Bradbury; RV32I-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 16061e368fSAlex Bradbury; RV32I-ILP32-NEXT: addi sp, sp, 16 17061e368fSAlex Bradbury; RV32I-ILP32-NEXT: ret 18061e368fSAlex Bradbury; 19061e368fSAlex Bradbury; RV64I-LP64-LABEL: float_to_bfloat: 20061e368fSAlex Bradbury; RV64I-LP64: # %bb.0: 21061e368fSAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, -16 22061e368fSAlex Bradbury; RV64I-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 23eabaee0cSFangrui Song; RV64I-LP64-NEXT: call __truncsfbf2 24061e368fSAlex Bradbury; RV64I-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 25061e368fSAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, 16 26061e368fSAlex Bradbury; RV64I-LP64-NEXT: ret 2792912499SAlex Bradbury; 2892912499SAlex Bradbury; RV32ID-ILP32-LABEL: float_to_bfloat: 2992912499SAlex Bradbury; RV32ID-ILP32: # %bb.0: 3092912499SAlex Bradbury; RV32ID-ILP32-NEXT: addi sp, sp, -16 3192912499SAlex Bradbury; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 32eabaee0cSFangrui Song; RV32ID-ILP32-NEXT: call __truncsfbf2 3392912499SAlex Bradbury; RV32ID-ILP32-NEXT: lui a1, 1048560 3492912499SAlex Bradbury; RV32ID-ILP32-NEXT: or a0, a0, a1 3592912499SAlex Bradbury; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3692912499SAlex Bradbury; RV32ID-ILP32-NEXT: addi sp, sp, 16 3792912499SAlex Bradbury; RV32ID-ILP32-NEXT: ret 3892912499SAlex Bradbury; 3992912499SAlex Bradbury; RV64ID-LP64-LABEL: float_to_bfloat: 4092912499SAlex Bradbury; RV64ID-LP64: # %bb.0: 4192912499SAlex Bradbury; RV64ID-LP64-NEXT: addi sp, sp, -16 4292912499SAlex Bradbury; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 43eabaee0cSFangrui Song; RV64ID-LP64-NEXT: call __truncsfbf2 4492912499SAlex Bradbury; RV64ID-LP64-NEXT: lui a1, 1048560 4592912499SAlex Bradbury; RV64ID-LP64-NEXT: or a0, a0, a1 4692912499SAlex Bradbury; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4792912499SAlex Bradbury; RV64ID-LP64-NEXT: addi sp, sp, 16 4892912499SAlex Bradbury; RV64ID-LP64-NEXT: ret 4992912499SAlex Bradbury; 5092912499SAlex Bradbury; RV32ID-ILP32D-LABEL: float_to_bfloat: 5192912499SAlex Bradbury; RV32ID-ILP32D: # %bb.0: 5292912499SAlex Bradbury; RV32ID-ILP32D-NEXT: addi sp, sp, -16 5392912499SAlex Bradbury; RV32ID-ILP32D-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 54eabaee0cSFangrui Song; RV32ID-ILP32D-NEXT: call __truncsfbf2 5592912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.x.w a0, fa0 5692912499SAlex Bradbury; RV32ID-ILP32D-NEXT: lui a1, 1048560 5792912499SAlex Bradbury; RV32ID-ILP32D-NEXT: or a0, a0, a1 5892912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.w.x fa0, a0 5992912499SAlex Bradbury; RV32ID-ILP32D-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6092912499SAlex Bradbury; RV32ID-ILP32D-NEXT: addi sp, sp, 16 6192912499SAlex Bradbury; RV32ID-ILP32D-NEXT: ret 6292912499SAlex Bradbury; 6392912499SAlex Bradbury; RV64ID-LP64D-LABEL: float_to_bfloat: 6492912499SAlex Bradbury; RV64ID-LP64D: # %bb.0: 6592912499SAlex Bradbury; RV64ID-LP64D-NEXT: addi sp, sp, -16 6692912499SAlex Bradbury; RV64ID-LP64D-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 67eabaee0cSFangrui Song; RV64ID-LP64D-NEXT: call __truncsfbf2 6892912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.x.w a0, fa0 6992912499SAlex Bradbury; RV64ID-LP64D-NEXT: lui a1, 1048560 7092912499SAlex Bradbury; RV64ID-LP64D-NEXT: or a0, a0, a1 7192912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.w.x fa0, a0 7292912499SAlex Bradbury; RV64ID-LP64D-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 7392912499SAlex Bradbury; RV64ID-LP64D-NEXT: addi sp, sp, 16 7492912499SAlex Bradbury; RV64ID-LP64D-NEXT: ret 75061e368fSAlex Bradbury %1 = fptrunc float %a to bfloat 76061e368fSAlex Bradbury ret bfloat %1 77061e368fSAlex Bradbury} 78061e368fSAlex Bradbury 79061e368fSAlex Bradburydefine bfloat @double_to_bfloat(double %a) nounwind { 80061e368fSAlex Bradbury; RV32I-ILP32-LABEL: double_to_bfloat: 81061e368fSAlex Bradbury; RV32I-ILP32: # %bb.0: 82061e368fSAlex Bradbury; RV32I-ILP32-NEXT: addi sp, sp, -16 83061e368fSAlex Bradbury; RV32I-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 84eabaee0cSFangrui Song; RV32I-ILP32-NEXT: call __truncdfbf2 85061e368fSAlex Bradbury; RV32I-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 86061e368fSAlex Bradbury; RV32I-ILP32-NEXT: addi sp, sp, 16 87061e368fSAlex Bradbury; RV32I-ILP32-NEXT: ret 88061e368fSAlex Bradbury; 89061e368fSAlex Bradbury; RV64I-LP64-LABEL: double_to_bfloat: 90061e368fSAlex Bradbury; RV64I-LP64: # %bb.0: 91061e368fSAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, -16 92061e368fSAlex Bradbury; RV64I-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 93eabaee0cSFangrui Song; RV64I-LP64-NEXT: call __truncdfbf2 94061e368fSAlex Bradbury; RV64I-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 95061e368fSAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, 16 96061e368fSAlex Bradbury; RV64I-LP64-NEXT: ret 9792912499SAlex Bradbury; 9892912499SAlex Bradbury; RV32ID-ILP32-LABEL: double_to_bfloat: 9992912499SAlex Bradbury; RV32ID-ILP32: # %bb.0: 10092912499SAlex Bradbury; RV32ID-ILP32-NEXT: addi sp, sp, -16 10192912499SAlex Bradbury; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 102eabaee0cSFangrui Song; RV32ID-ILP32-NEXT: call __truncdfbf2 10392912499SAlex Bradbury; RV32ID-ILP32-NEXT: lui a1, 1048560 10492912499SAlex Bradbury; RV32ID-ILP32-NEXT: or a0, a0, a1 10592912499SAlex Bradbury; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 10692912499SAlex Bradbury; RV32ID-ILP32-NEXT: addi sp, sp, 16 10792912499SAlex Bradbury; RV32ID-ILP32-NEXT: ret 10892912499SAlex Bradbury; 10992912499SAlex Bradbury; RV64ID-LP64-LABEL: double_to_bfloat: 11092912499SAlex Bradbury; RV64ID-LP64: # %bb.0: 11192912499SAlex Bradbury; RV64ID-LP64-NEXT: addi sp, sp, -16 11292912499SAlex Bradbury; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 113eabaee0cSFangrui Song; RV64ID-LP64-NEXT: call __truncdfbf2 11492912499SAlex Bradbury; RV64ID-LP64-NEXT: lui a1, 1048560 11592912499SAlex Bradbury; RV64ID-LP64-NEXT: or a0, a0, a1 11692912499SAlex Bradbury; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 11792912499SAlex Bradbury; RV64ID-LP64-NEXT: addi sp, sp, 16 11892912499SAlex Bradbury; RV64ID-LP64-NEXT: ret 11992912499SAlex Bradbury; 12092912499SAlex Bradbury; RV32ID-ILP32D-LABEL: double_to_bfloat: 12192912499SAlex Bradbury; RV32ID-ILP32D: # %bb.0: 12292912499SAlex Bradbury; RV32ID-ILP32D-NEXT: addi sp, sp, -16 12392912499SAlex Bradbury; RV32ID-ILP32D-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 124eabaee0cSFangrui Song; RV32ID-ILP32D-NEXT: call __truncdfbf2 12592912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.x.w a0, fa0 12692912499SAlex Bradbury; RV32ID-ILP32D-NEXT: lui a1, 1048560 12792912499SAlex Bradbury; RV32ID-ILP32D-NEXT: or a0, a0, a1 12892912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.w.x fa0, a0 12992912499SAlex Bradbury; RV32ID-ILP32D-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 13092912499SAlex Bradbury; RV32ID-ILP32D-NEXT: addi sp, sp, 16 13192912499SAlex Bradbury; RV32ID-ILP32D-NEXT: ret 13292912499SAlex Bradbury; 13392912499SAlex Bradbury; RV64ID-LP64D-LABEL: double_to_bfloat: 13492912499SAlex Bradbury; RV64ID-LP64D: # %bb.0: 13592912499SAlex Bradbury; RV64ID-LP64D-NEXT: addi sp, sp, -16 13692912499SAlex Bradbury; RV64ID-LP64D-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 137eabaee0cSFangrui Song; RV64ID-LP64D-NEXT: call __truncdfbf2 13892912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.x.w a0, fa0 13992912499SAlex Bradbury; RV64ID-LP64D-NEXT: lui a1, 1048560 14092912499SAlex Bradbury; RV64ID-LP64D-NEXT: or a0, a0, a1 14192912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.w.x fa0, a0 14292912499SAlex Bradbury; RV64ID-LP64D-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 14392912499SAlex Bradbury; RV64ID-LP64D-NEXT: addi sp, sp, 16 14492912499SAlex Bradbury; RV64ID-LP64D-NEXT: ret 145061e368fSAlex Bradbury %1 = fptrunc double %a to bfloat 146061e368fSAlex Bradbury ret bfloat %1 147061e368fSAlex Bradbury} 148061e368fSAlex Bradbury 149061e368fSAlex Bradburydefine float @bfloat_to_float(bfloat %a) nounwind { 150061e368fSAlex Bradbury; RV32I-ILP32-LABEL: bfloat_to_float: 151061e368fSAlex Bradbury; RV32I-ILP32: # %bb.0: 152061e368fSAlex Bradbury; RV32I-ILP32-NEXT: slli a0, a0, 16 153061e368fSAlex Bradbury; RV32I-ILP32-NEXT: ret 154061e368fSAlex Bradbury; 155061e368fSAlex Bradbury; RV64I-LP64-LABEL: bfloat_to_float: 156061e368fSAlex Bradbury; RV64I-LP64: # %bb.0: 157061e368fSAlex Bradbury; RV64I-LP64-NEXT: slliw a0, a0, 16 158061e368fSAlex Bradbury; RV64I-LP64-NEXT: ret 15992912499SAlex Bradbury; 16092912499SAlex Bradbury; RV32ID-ILP32-LABEL: bfloat_to_float: 16192912499SAlex Bradbury; RV32ID-ILP32: # %bb.0: 16292912499SAlex Bradbury; RV32ID-ILP32-NEXT: slli a0, a0, 16 16392912499SAlex Bradbury; RV32ID-ILP32-NEXT: ret 16492912499SAlex Bradbury; 16592912499SAlex Bradbury; RV64ID-LP64-LABEL: bfloat_to_float: 16692912499SAlex Bradbury; RV64ID-LP64: # %bb.0: 16792912499SAlex Bradbury; RV64ID-LP64-NEXT: slli a0, a0, 16 16892912499SAlex Bradbury; RV64ID-LP64-NEXT: ret 16992912499SAlex Bradbury; 17092912499SAlex Bradbury; RV32ID-ILP32D-LABEL: bfloat_to_float: 17192912499SAlex Bradbury; RV32ID-ILP32D: # %bb.0: 17292912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.x.w a0, fa0 17392912499SAlex Bradbury; RV32ID-ILP32D-NEXT: slli a0, a0, 16 17492912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.w.x fa0, a0 17592912499SAlex Bradbury; RV32ID-ILP32D-NEXT: ret 17692912499SAlex Bradbury; 17792912499SAlex Bradbury; RV64ID-LP64D-LABEL: bfloat_to_float: 17892912499SAlex Bradbury; RV64ID-LP64D: # %bb.0: 17992912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.x.w a0, fa0 18092912499SAlex Bradbury; RV64ID-LP64D-NEXT: slli a0, a0, 16 18192912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.w.x fa0, a0 18292912499SAlex Bradbury; RV64ID-LP64D-NEXT: ret 183061e368fSAlex Bradbury %1 = fpext bfloat %a to float 184061e368fSAlex Bradbury ret float %1 185061e368fSAlex Bradbury} 186061e368fSAlex Bradbury 187061e368fSAlex Bradburydefine double @bfloat_to_double(bfloat %a) nounwind { 188061e368fSAlex Bradbury; RV32I-ILP32-LABEL: bfloat_to_double: 189061e368fSAlex Bradbury; RV32I-ILP32: # %bb.0: 190061e368fSAlex Bradbury; RV32I-ILP32-NEXT: addi sp, sp, -16 191061e368fSAlex Bradbury; RV32I-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 192061e368fSAlex Bradbury; RV32I-ILP32-NEXT: slli a0, a0, 16 193eabaee0cSFangrui Song; RV32I-ILP32-NEXT: call __extendsfdf2 194061e368fSAlex Bradbury; RV32I-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 195061e368fSAlex Bradbury; RV32I-ILP32-NEXT: addi sp, sp, 16 196061e368fSAlex Bradbury; RV32I-ILP32-NEXT: ret 197061e368fSAlex Bradbury; 198061e368fSAlex Bradbury; RV64I-LP64-LABEL: bfloat_to_double: 199061e368fSAlex Bradbury; RV64I-LP64: # %bb.0: 200061e368fSAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, -16 201061e368fSAlex Bradbury; RV64I-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 202c4efcd69SAlex Bradbury; RV64I-LP64-NEXT: slliw a0, a0, 16 203eabaee0cSFangrui Song; RV64I-LP64-NEXT: call __extendsfdf2 204061e368fSAlex Bradbury; RV64I-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 205061e368fSAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, 16 206061e368fSAlex Bradbury; RV64I-LP64-NEXT: ret 20792912499SAlex Bradbury; 20892912499SAlex Bradbury; RV32ID-ILP32-LABEL: bfloat_to_double: 20992912499SAlex Bradbury; RV32ID-ILP32: # %bb.0: 21092912499SAlex Bradbury; RV32ID-ILP32-NEXT: addi sp, sp, -16 21192912499SAlex Bradbury; RV32ID-ILP32-NEXT: slli a0, a0, 16 21292912499SAlex Bradbury; RV32ID-ILP32-NEXT: fmv.w.x fa5, a0 21392912499SAlex Bradbury; RV32ID-ILP32-NEXT: fcvt.d.s fa5, fa5 21492912499SAlex Bradbury; RV32ID-ILP32-NEXT: fsd fa5, 8(sp) 21592912499SAlex Bradbury; RV32ID-ILP32-NEXT: lw a0, 8(sp) 21692912499SAlex Bradbury; RV32ID-ILP32-NEXT: lw a1, 12(sp) 21792912499SAlex Bradbury; RV32ID-ILP32-NEXT: addi sp, sp, 16 21892912499SAlex Bradbury; RV32ID-ILP32-NEXT: ret 21992912499SAlex Bradbury; 22092912499SAlex Bradbury; RV64ID-LP64-LABEL: bfloat_to_double: 22192912499SAlex Bradbury; RV64ID-LP64: # %bb.0: 22292912499SAlex Bradbury; RV64ID-LP64-NEXT: slli a0, a0, 16 22392912499SAlex Bradbury; RV64ID-LP64-NEXT: fmv.w.x fa5, a0 22492912499SAlex Bradbury; RV64ID-LP64-NEXT: fcvt.d.s fa5, fa5 22592912499SAlex Bradbury; RV64ID-LP64-NEXT: fmv.x.d a0, fa5 22692912499SAlex Bradbury; RV64ID-LP64-NEXT: ret 22792912499SAlex Bradbury; 22892912499SAlex Bradbury; RV32ID-ILP32D-LABEL: bfloat_to_double: 22992912499SAlex Bradbury; RV32ID-ILP32D: # %bb.0: 23092912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.x.w a0, fa0 23192912499SAlex Bradbury; RV32ID-ILP32D-NEXT: slli a0, a0, 16 23292912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.w.x fa5, a0 23392912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fcvt.d.s fa0, fa5 23492912499SAlex Bradbury; RV32ID-ILP32D-NEXT: ret 23592912499SAlex Bradbury; 23692912499SAlex Bradbury; RV64ID-LP64D-LABEL: bfloat_to_double: 23792912499SAlex Bradbury; RV64ID-LP64D: # %bb.0: 23892912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.x.w a0, fa0 23992912499SAlex Bradbury; RV64ID-LP64D-NEXT: slli a0, a0, 16 24092912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.w.x fa5, a0 24192912499SAlex Bradbury; RV64ID-LP64D-NEXT: fcvt.d.s fa0, fa5 24292912499SAlex Bradbury; RV64ID-LP64D-NEXT: ret 243061e368fSAlex Bradbury %1 = fpext bfloat %a to double 244061e368fSAlex Bradbury ret double %1 245061e368fSAlex Bradbury} 246061e368fSAlex Bradbury 2479bb34ca6SAlex Bradburydefine bfloat @i16_to_bfloat(i16 %a) nounwind { 2489bb34ca6SAlex Bradbury; RV32I-ILP32-LABEL: i16_to_bfloat: 2499bb34ca6SAlex Bradbury; RV32I-ILP32: # %bb.0: 2509bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: ret 2519bb34ca6SAlex Bradbury; 2529bb34ca6SAlex Bradbury; RV64I-LP64-LABEL: i16_to_bfloat: 2539bb34ca6SAlex Bradbury; RV64I-LP64: # %bb.0: 2549bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: ret 25592912499SAlex Bradbury; 25692912499SAlex Bradbury; RV32ID-ILP32-LABEL: i16_to_bfloat: 25792912499SAlex Bradbury; RV32ID-ILP32: # %bb.0: 25892912499SAlex Bradbury; RV32ID-ILP32-NEXT: lui a1, 1048560 25992912499SAlex Bradbury; RV32ID-ILP32-NEXT: or a0, a0, a1 26092912499SAlex Bradbury; RV32ID-ILP32-NEXT: ret 26192912499SAlex Bradbury; 26292912499SAlex Bradbury; RV64ID-LP64-LABEL: i16_to_bfloat: 26392912499SAlex Bradbury; RV64ID-LP64: # %bb.0: 26492912499SAlex Bradbury; RV64ID-LP64-NEXT: lui a1, 1048560 26592912499SAlex Bradbury; RV64ID-LP64-NEXT: or a0, a0, a1 26692912499SAlex Bradbury; RV64ID-LP64-NEXT: ret 26792912499SAlex Bradbury; 26892912499SAlex Bradbury; RV32ID-ILP32D-LABEL: i16_to_bfloat: 26992912499SAlex Bradbury; RV32ID-ILP32D: # %bb.0: 27092912499SAlex Bradbury; RV32ID-ILP32D-NEXT: lui a1, 1048560 27192912499SAlex Bradbury; RV32ID-ILP32D-NEXT: or a0, a0, a1 27292912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.w.x fa0, a0 27392912499SAlex Bradbury; RV32ID-ILP32D-NEXT: ret 27492912499SAlex Bradbury; 27592912499SAlex Bradbury; RV64ID-LP64D-LABEL: i16_to_bfloat: 27692912499SAlex Bradbury; RV64ID-LP64D: # %bb.0: 27792912499SAlex Bradbury; RV64ID-LP64D-NEXT: lui a1, 1048560 27892912499SAlex Bradbury; RV64ID-LP64D-NEXT: or a0, a0, a1 27992912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.w.x fa0, a0 28092912499SAlex Bradbury; RV64ID-LP64D-NEXT: ret 2819bb34ca6SAlex Bradbury %1 = bitcast i16 %a to bfloat 2829bb34ca6SAlex Bradbury ret bfloat %1 2839bb34ca6SAlex Bradbury} 2849bb34ca6SAlex Bradbury 2859bb34ca6SAlex Bradburydefine i16 @bfloat_to_i16(bfloat %a) nounwind { 2869bb34ca6SAlex Bradbury; RV32I-ILP32-LABEL: bfloat_to_i16: 2879bb34ca6SAlex Bradbury; RV32I-ILP32: # %bb.0: 2889bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: ret 2899bb34ca6SAlex Bradbury; 2909bb34ca6SAlex Bradbury; RV64I-LP64-LABEL: bfloat_to_i16: 2919bb34ca6SAlex Bradbury; RV64I-LP64: # %bb.0: 2929bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: ret 29392912499SAlex Bradbury; 29492912499SAlex Bradbury; RV32ID-ILP32-LABEL: bfloat_to_i16: 29592912499SAlex Bradbury; RV32ID-ILP32: # %bb.0: 29692912499SAlex Bradbury; RV32ID-ILP32-NEXT: ret 29792912499SAlex Bradbury; 29892912499SAlex Bradbury; RV64ID-LP64-LABEL: bfloat_to_i16: 29992912499SAlex Bradbury; RV64ID-LP64: # %bb.0: 30092912499SAlex Bradbury; RV64ID-LP64-NEXT: ret 30192912499SAlex Bradbury; 30292912499SAlex Bradbury; RV32ID-ILP32D-LABEL: bfloat_to_i16: 30392912499SAlex Bradbury; RV32ID-ILP32D: # %bb.0: 30492912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.x.w a0, fa0 30592912499SAlex Bradbury; RV32ID-ILP32D-NEXT: ret 30692912499SAlex Bradbury; 30792912499SAlex Bradbury; RV64ID-LP64D-LABEL: bfloat_to_i16: 30892912499SAlex Bradbury; RV64ID-LP64D: # %bb.0: 30992912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.x.w a0, fa0 31092912499SAlex Bradbury; RV64ID-LP64D-NEXT: ret 3119bb34ca6SAlex Bradbury %1 = bitcast bfloat %a to i16 3129bb34ca6SAlex Bradbury ret i16 %1 3139bb34ca6SAlex Bradbury} 3149bb34ca6SAlex Bradbury 315061e368fSAlex Bradburydefine bfloat @bfloat_add(bfloat %a, bfloat %b) nounwind { 316061e368fSAlex Bradbury; RV32I-ILP32-LABEL: bfloat_add: 317061e368fSAlex Bradbury; RV32I-ILP32: # %bb.0: 318061e368fSAlex Bradbury; RV32I-ILP32-NEXT: addi sp, sp, -16 319061e368fSAlex Bradbury; RV32I-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 320061e368fSAlex Bradbury; RV32I-ILP32-NEXT: slli a0, a0, 16 321061e368fSAlex Bradbury; RV32I-ILP32-NEXT: slli a1, a1, 16 322eabaee0cSFangrui Song; RV32I-ILP32-NEXT: call __addsf3 323eabaee0cSFangrui Song; RV32I-ILP32-NEXT: call __truncsfbf2 324061e368fSAlex Bradbury; RV32I-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 325061e368fSAlex Bradbury; RV32I-ILP32-NEXT: addi sp, sp, 16 326061e368fSAlex Bradbury; RV32I-ILP32-NEXT: ret 327061e368fSAlex Bradbury; 328061e368fSAlex Bradbury; RV64I-LP64-LABEL: bfloat_add: 329061e368fSAlex Bradbury; RV64I-LP64: # %bb.0: 330061e368fSAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, -16 331061e368fSAlex Bradbury; RV64I-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 332061e368fSAlex Bradbury; RV64I-LP64-NEXT: slliw a0, a0, 16 333061e368fSAlex Bradbury; RV64I-LP64-NEXT: slliw a1, a1, 16 334eabaee0cSFangrui Song; RV64I-LP64-NEXT: call __addsf3 335eabaee0cSFangrui Song; RV64I-LP64-NEXT: call __truncsfbf2 336061e368fSAlex Bradbury; RV64I-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 337061e368fSAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, 16 338061e368fSAlex Bradbury; RV64I-LP64-NEXT: ret 33992912499SAlex Bradbury; 34092912499SAlex Bradbury; RV32ID-ILP32-LABEL: bfloat_add: 34192912499SAlex Bradbury; RV32ID-ILP32: # %bb.0: 34292912499SAlex Bradbury; RV32ID-ILP32-NEXT: addi sp, sp, -16 34392912499SAlex Bradbury; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 34492912499SAlex Bradbury; RV32ID-ILP32-NEXT: slli a1, a1, 16 34592912499SAlex Bradbury; RV32ID-ILP32-NEXT: slli a0, a0, 16 346*9122c523SPengcheng Wang; RV32ID-ILP32-NEXT: fmv.w.x fa5, a1 34792912499SAlex Bradbury; RV32ID-ILP32-NEXT: fmv.w.x fa4, a0 34892912499SAlex Bradbury; RV32ID-ILP32-NEXT: fadd.s fa5, fa4, fa5 34992912499SAlex Bradbury; RV32ID-ILP32-NEXT: fmv.x.w a0, fa5 350eabaee0cSFangrui Song; RV32ID-ILP32-NEXT: call __truncsfbf2 35192912499SAlex Bradbury; RV32ID-ILP32-NEXT: lui a1, 1048560 35292912499SAlex Bradbury; RV32ID-ILP32-NEXT: or a0, a0, a1 35392912499SAlex Bradbury; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 35492912499SAlex Bradbury; RV32ID-ILP32-NEXT: addi sp, sp, 16 35592912499SAlex Bradbury; RV32ID-ILP32-NEXT: ret 35692912499SAlex Bradbury; 35792912499SAlex Bradbury; RV64ID-LP64-LABEL: bfloat_add: 35892912499SAlex Bradbury; RV64ID-LP64: # %bb.0: 35992912499SAlex Bradbury; RV64ID-LP64-NEXT: addi sp, sp, -16 36092912499SAlex Bradbury; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 36192912499SAlex Bradbury; RV64ID-LP64-NEXT: slli a1, a1, 16 36292912499SAlex Bradbury; RV64ID-LP64-NEXT: slli a0, a0, 16 363*9122c523SPengcheng Wang; RV64ID-LP64-NEXT: fmv.w.x fa5, a1 36492912499SAlex Bradbury; RV64ID-LP64-NEXT: fmv.w.x fa4, a0 36592912499SAlex Bradbury; RV64ID-LP64-NEXT: fadd.s fa5, fa4, fa5 36692912499SAlex Bradbury; RV64ID-LP64-NEXT: fmv.x.w a0, fa5 367eabaee0cSFangrui Song; RV64ID-LP64-NEXT: call __truncsfbf2 36892912499SAlex Bradbury; RV64ID-LP64-NEXT: lui a1, 1048560 36992912499SAlex Bradbury; RV64ID-LP64-NEXT: or a0, a0, a1 37092912499SAlex Bradbury; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 37192912499SAlex Bradbury; RV64ID-LP64-NEXT: addi sp, sp, 16 37292912499SAlex Bradbury; RV64ID-LP64-NEXT: ret 37392912499SAlex Bradbury; 37492912499SAlex Bradbury; RV32ID-ILP32D-LABEL: bfloat_add: 37592912499SAlex Bradbury; RV32ID-ILP32D: # %bb.0: 37692912499SAlex Bradbury; RV32ID-ILP32D-NEXT: addi sp, sp, -16 37792912499SAlex Bradbury; RV32ID-ILP32D-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 37892912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.x.w a0, fa0 37992912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.x.w a1, fa1 38092912499SAlex Bradbury; RV32ID-ILP32D-NEXT: slli a1, a1, 16 38192912499SAlex Bradbury; RV32ID-ILP32D-NEXT: slli a0, a0, 16 382*9122c523SPengcheng Wang; RV32ID-ILP32D-NEXT: fmv.w.x fa5, a1 38392912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.w.x fa4, a0 38492912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fadd.s fa0, fa4, fa5 385eabaee0cSFangrui Song; RV32ID-ILP32D-NEXT: call __truncsfbf2 38692912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.x.w a0, fa0 38792912499SAlex Bradbury; RV32ID-ILP32D-NEXT: lui a1, 1048560 38892912499SAlex Bradbury; RV32ID-ILP32D-NEXT: or a0, a0, a1 38992912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.w.x fa0, a0 39092912499SAlex Bradbury; RV32ID-ILP32D-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 39192912499SAlex Bradbury; RV32ID-ILP32D-NEXT: addi sp, sp, 16 39292912499SAlex Bradbury; RV32ID-ILP32D-NEXT: ret 39392912499SAlex Bradbury; 39492912499SAlex Bradbury; RV64ID-LP64D-LABEL: bfloat_add: 39592912499SAlex Bradbury; RV64ID-LP64D: # %bb.0: 39692912499SAlex Bradbury; RV64ID-LP64D-NEXT: addi sp, sp, -16 39792912499SAlex Bradbury; RV64ID-LP64D-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 39892912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.x.w a0, fa0 3999f6bf00bSShao-Ce SUN; RV64ID-LP64D-NEXT: fmv.x.w a1, fa1 40092912499SAlex Bradbury; RV64ID-LP64D-NEXT: slli a1, a1, 16 40192912499SAlex Bradbury; RV64ID-LP64D-NEXT: slli a0, a0, 16 402*9122c523SPengcheng Wang; RV64ID-LP64D-NEXT: fmv.w.x fa5, a1 40392912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.w.x fa4, a0 40492912499SAlex Bradbury; RV64ID-LP64D-NEXT: fadd.s fa0, fa4, fa5 405eabaee0cSFangrui Song; RV64ID-LP64D-NEXT: call __truncsfbf2 40692912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.x.w a0, fa0 40792912499SAlex Bradbury; RV64ID-LP64D-NEXT: lui a1, 1048560 40892912499SAlex Bradbury; RV64ID-LP64D-NEXT: or a0, a0, a1 40992912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.w.x fa0, a0 41092912499SAlex Bradbury; RV64ID-LP64D-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 41192912499SAlex Bradbury; RV64ID-LP64D-NEXT: addi sp, sp, 16 41292912499SAlex Bradbury; RV64ID-LP64D-NEXT: ret 413061e368fSAlex Bradbury %1 = fadd bfloat %a, %b 414061e368fSAlex Bradbury ret bfloat %1 415061e368fSAlex Bradbury} 4169bb34ca6SAlex Bradbury 4179bb34ca6SAlex Bradburydefine bfloat @bfloat_load(ptr %a) nounwind { 4189bb34ca6SAlex Bradbury; RV32I-ILP32-LABEL: bfloat_load: 4199bb34ca6SAlex Bradbury; RV32I-ILP32: # %bb.0: 4209bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: addi sp, sp, -16 4219bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4229bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: lh a1, 0(a0) 4239bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: lh a2, 6(a0) 4249bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: slli a0, a1, 16 4259bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: slli a1, a2, 16 426eabaee0cSFangrui Song; RV32I-ILP32-NEXT: call __addsf3 427eabaee0cSFangrui Song; RV32I-ILP32-NEXT: call __truncsfbf2 4289bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4299bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: addi sp, sp, 16 4309bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: ret 4319bb34ca6SAlex Bradbury; 4329bb34ca6SAlex Bradbury; RV64I-LP64-LABEL: bfloat_load: 4339bb34ca6SAlex Bradbury; RV64I-LP64: # %bb.0: 4349bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, -16 4359bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4369bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: lh a1, 0(a0) 4379bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: lh a2, 6(a0) 4389bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: slliw a0, a1, 16 4399bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: slliw a1, a2, 16 440eabaee0cSFangrui Song; RV64I-LP64-NEXT: call __addsf3 441eabaee0cSFangrui Song; RV64I-LP64-NEXT: call __truncsfbf2 4429bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4439bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, 16 4449bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: ret 44592912499SAlex Bradbury; 44692912499SAlex Bradbury; RV32ID-ILP32-LABEL: bfloat_load: 44792912499SAlex Bradbury; RV32ID-ILP32: # %bb.0: 44892912499SAlex Bradbury; RV32ID-ILP32-NEXT: addi sp, sp, -16 44992912499SAlex Bradbury; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 45092912499SAlex Bradbury; RV32ID-ILP32-NEXT: lhu a1, 6(a0) 45192912499SAlex Bradbury; RV32ID-ILP32-NEXT: lhu a0, 0(a0) 45292912499SAlex Bradbury; RV32ID-ILP32-NEXT: slli a1, a1, 16 45392912499SAlex Bradbury; RV32ID-ILP32-NEXT: slli a0, a0, 16 454*9122c523SPengcheng Wang; RV32ID-ILP32-NEXT: fmv.w.x fa5, a1 45592912499SAlex Bradbury; RV32ID-ILP32-NEXT: fmv.w.x fa4, a0 45692912499SAlex Bradbury; RV32ID-ILP32-NEXT: fadd.s fa5, fa4, fa5 45792912499SAlex Bradbury; RV32ID-ILP32-NEXT: fmv.x.w a0, fa5 458eabaee0cSFangrui Song; RV32ID-ILP32-NEXT: call __truncsfbf2 45992912499SAlex Bradbury; RV32ID-ILP32-NEXT: lui a1, 1048560 46092912499SAlex Bradbury; RV32ID-ILP32-NEXT: or a0, a0, a1 46192912499SAlex Bradbury; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 46292912499SAlex Bradbury; RV32ID-ILP32-NEXT: addi sp, sp, 16 46392912499SAlex Bradbury; RV32ID-ILP32-NEXT: ret 46492912499SAlex Bradbury; 46592912499SAlex Bradbury; RV64ID-LP64-LABEL: bfloat_load: 46692912499SAlex Bradbury; RV64ID-LP64: # %bb.0: 46792912499SAlex Bradbury; RV64ID-LP64-NEXT: addi sp, sp, -16 46892912499SAlex Bradbury; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 46992912499SAlex Bradbury; RV64ID-LP64-NEXT: lhu a1, 6(a0) 47092912499SAlex Bradbury; RV64ID-LP64-NEXT: lhu a0, 0(a0) 47192912499SAlex Bradbury; RV64ID-LP64-NEXT: slli a1, a1, 16 47292912499SAlex Bradbury; RV64ID-LP64-NEXT: slli a0, a0, 16 473*9122c523SPengcheng Wang; RV64ID-LP64-NEXT: fmv.w.x fa5, a1 47492912499SAlex Bradbury; RV64ID-LP64-NEXT: fmv.w.x fa4, a0 47592912499SAlex Bradbury; RV64ID-LP64-NEXT: fadd.s fa5, fa4, fa5 47692912499SAlex Bradbury; RV64ID-LP64-NEXT: fmv.x.w a0, fa5 477eabaee0cSFangrui Song; RV64ID-LP64-NEXT: call __truncsfbf2 47892912499SAlex Bradbury; RV64ID-LP64-NEXT: lui a1, 1048560 47992912499SAlex Bradbury; RV64ID-LP64-NEXT: or a0, a0, a1 48092912499SAlex Bradbury; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 48192912499SAlex Bradbury; RV64ID-LP64-NEXT: addi sp, sp, 16 48292912499SAlex Bradbury; RV64ID-LP64-NEXT: ret 48392912499SAlex Bradbury; 48492912499SAlex Bradbury; RV32ID-ILP32D-LABEL: bfloat_load: 48592912499SAlex Bradbury; RV32ID-ILP32D: # %bb.0: 48692912499SAlex Bradbury; RV32ID-ILP32D-NEXT: addi sp, sp, -16 48792912499SAlex Bradbury; RV32ID-ILP32D-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 48892912499SAlex Bradbury; RV32ID-ILP32D-NEXT: lhu a1, 6(a0) 48992912499SAlex Bradbury; RV32ID-ILP32D-NEXT: lhu a0, 0(a0) 49092912499SAlex Bradbury; RV32ID-ILP32D-NEXT: slli a1, a1, 16 49192912499SAlex Bradbury; RV32ID-ILP32D-NEXT: slli a0, a0, 16 492*9122c523SPengcheng Wang; RV32ID-ILP32D-NEXT: fmv.w.x fa5, a1 49392912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.w.x fa4, a0 49492912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fadd.s fa0, fa4, fa5 495eabaee0cSFangrui Song; RV32ID-ILP32D-NEXT: call __truncsfbf2 49692912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.x.w a0, fa0 49792912499SAlex Bradbury; RV32ID-ILP32D-NEXT: lui a1, 1048560 49892912499SAlex Bradbury; RV32ID-ILP32D-NEXT: or a0, a0, a1 49992912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.w.x fa0, a0 50092912499SAlex Bradbury; RV32ID-ILP32D-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 50192912499SAlex Bradbury; RV32ID-ILP32D-NEXT: addi sp, sp, 16 50292912499SAlex Bradbury; RV32ID-ILP32D-NEXT: ret 50392912499SAlex Bradbury; 50492912499SAlex Bradbury; RV64ID-LP64D-LABEL: bfloat_load: 50592912499SAlex Bradbury; RV64ID-LP64D: # %bb.0: 50692912499SAlex Bradbury; RV64ID-LP64D-NEXT: addi sp, sp, -16 50792912499SAlex Bradbury; RV64ID-LP64D-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 50892912499SAlex Bradbury; RV64ID-LP64D-NEXT: lhu a1, 6(a0) 50992912499SAlex Bradbury; RV64ID-LP64D-NEXT: lhu a0, 0(a0) 51092912499SAlex Bradbury; RV64ID-LP64D-NEXT: slli a1, a1, 16 51192912499SAlex Bradbury; RV64ID-LP64D-NEXT: slli a0, a0, 16 512*9122c523SPengcheng Wang; RV64ID-LP64D-NEXT: fmv.w.x fa5, a1 51392912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.w.x fa4, a0 51492912499SAlex Bradbury; RV64ID-LP64D-NEXT: fadd.s fa0, fa4, fa5 515eabaee0cSFangrui Song; RV64ID-LP64D-NEXT: call __truncsfbf2 51692912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.x.w a0, fa0 51792912499SAlex Bradbury; RV64ID-LP64D-NEXT: lui a1, 1048560 51892912499SAlex Bradbury; RV64ID-LP64D-NEXT: or a0, a0, a1 51992912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.w.x fa0, a0 52092912499SAlex Bradbury; RV64ID-LP64D-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 52192912499SAlex Bradbury; RV64ID-LP64D-NEXT: addi sp, sp, 16 52292912499SAlex Bradbury; RV64ID-LP64D-NEXT: ret 5239bb34ca6SAlex Bradbury %1 = load bfloat, ptr %a 5249bb34ca6SAlex Bradbury %2 = getelementptr bfloat, ptr %a, i32 3 5259bb34ca6SAlex Bradbury %3 = load bfloat, ptr %2 5269bb34ca6SAlex Bradbury %4 = fadd bfloat %1, %3 5279bb34ca6SAlex Bradbury ret bfloat %4 5289bb34ca6SAlex Bradbury} 5299bb34ca6SAlex Bradbury 5309bb34ca6SAlex Bradburydefine void @bfloat_store(ptr %a, bfloat %b, bfloat %c) nounwind { 5319bb34ca6SAlex Bradbury; RV32I-ILP32-LABEL: bfloat_store: 5329bb34ca6SAlex Bradbury; RV32I-ILP32: # %bb.0: 5339bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: addi sp, sp, -16 5349bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5359bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 5369bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: mv s0, a0 5379bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: slli a0, a1, 16 5389bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: slli a1, a2, 16 539eabaee0cSFangrui Song; RV32I-ILP32-NEXT: call __addsf3 540eabaee0cSFangrui Song; RV32I-ILP32-NEXT: call __truncsfbf2 5419bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: sh a0, 0(s0) 5429bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: sh a0, 16(s0) 5439bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5449bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 5459bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: addi sp, sp, 16 5469bb34ca6SAlex Bradbury; RV32I-ILP32-NEXT: ret 5479bb34ca6SAlex Bradbury; 5489bb34ca6SAlex Bradbury; RV64I-LP64-LABEL: bfloat_store: 5499bb34ca6SAlex Bradbury; RV64I-LP64: # %bb.0: 5509bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, -16 5519bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5529bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 5539bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: mv s0, a0 5549bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: slliw a0, a1, 16 5559bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: slliw a1, a2, 16 556eabaee0cSFangrui Song; RV64I-LP64-NEXT: call __addsf3 557eabaee0cSFangrui Song; RV64I-LP64-NEXT: call __truncsfbf2 5589bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: sh a0, 0(s0) 5599bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: sh a0, 16(s0) 5609bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5619bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: ld s0, 0(sp) # 8-byte Folded Reload 5629bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, 16 5639bb34ca6SAlex Bradbury; RV64I-LP64-NEXT: ret 56492912499SAlex Bradbury; 56592912499SAlex Bradbury; RV32ID-ILP32-LABEL: bfloat_store: 56692912499SAlex Bradbury; RV32ID-ILP32: # %bb.0: 56792912499SAlex Bradbury; RV32ID-ILP32-NEXT: addi sp, sp, -16 56892912499SAlex Bradbury; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 56992912499SAlex Bradbury; RV32ID-ILP32-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 57092912499SAlex Bradbury; RV32ID-ILP32-NEXT: mv s0, a0 57192912499SAlex Bradbury; RV32ID-ILP32-NEXT: slli a2, a2, 16 57292912499SAlex Bradbury; RV32ID-ILP32-NEXT: slli a1, a1, 16 573*9122c523SPengcheng Wang; RV32ID-ILP32-NEXT: fmv.w.x fa5, a2 57492912499SAlex Bradbury; RV32ID-ILP32-NEXT: fmv.w.x fa4, a1 57592912499SAlex Bradbury; RV32ID-ILP32-NEXT: fadd.s fa5, fa4, fa5 57692912499SAlex Bradbury; RV32ID-ILP32-NEXT: fmv.x.w a0, fa5 577eabaee0cSFangrui Song; RV32ID-ILP32-NEXT: call __truncsfbf2 57892912499SAlex Bradbury; RV32ID-ILP32-NEXT: sh a0, 0(s0) 57992912499SAlex Bradbury; RV32ID-ILP32-NEXT: sh a0, 16(s0) 58092912499SAlex Bradbury; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 58192912499SAlex Bradbury; RV32ID-ILP32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 58292912499SAlex Bradbury; RV32ID-ILP32-NEXT: addi sp, sp, 16 58392912499SAlex Bradbury; RV32ID-ILP32-NEXT: ret 58492912499SAlex Bradbury; 58592912499SAlex Bradbury; RV64ID-LP64-LABEL: bfloat_store: 58692912499SAlex Bradbury; RV64ID-LP64: # %bb.0: 58792912499SAlex Bradbury; RV64ID-LP64-NEXT: addi sp, sp, -16 58892912499SAlex Bradbury; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 58992912499SAlex Bradbury; RV64ID-LP64-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 59092912499SAlex Bradbury; RV64ID-LP64-NEXT: mv s0, a0 5919f6bf00bSShao-Ce SUN; RV64ID-LP64-NEXT: slli a2, a2, 16 59292912499SAlex Bradbury; RV64ID-LP64-NEXT: slli a1, a1, 16 593*9122c523SPengcheng Wang; RV64ID-LP64-NEXT: fmv.w.x fa5, a2 59492912499SAlex Bradbury; RV64ID-LP64-NEXT: fmv.w.x fa4, a1 59592912499SAlex Bradbury; RV64ID-LP64-NEXT: fadd.s fa5, fa4, fa5 59692912499SAlex Bradbury; RV64ID-LP64-NEXT: fmv.x.w a0, fa5 597eabaee0cSFangrui Song; RV64ID-LP64-NEXT: call __truncsfbf2 59892912499SAlex Bradbury; RV64ID-LP64-NEXT: sh a0, 0(s0) 59992912499SAlex Bradbury; RV64ID-LP64-NEXT: sh a0, 16(s0) 60092912499SAlex Bradbury; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 60192912499SAlex Bradbury; RV64ID-LP64-NEXT: ld s0, 0(sp) # 8-byte Folded Reload 60292912499SAlex Bradbury; RV64ID-LP64-NEXT: addi sp, sp, 16 60392912499SAlex Bradbury; RV64ID-LP64-NEXT: ret 60492912499SAlex Bradbury; 60592912499SAlex Bradbury; RV32ID-ILP32D-LABEL: bfloat_store: 60692912499SAlex Bradbury; RV32ID-ILP32D: # %bb.0: 60792912499SAlex Bradbury; RV32ID-ILP32D-NEXT: addi sp, sp, -16 60892912499SAlex Bradbury; RV32ID-ILP32D-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 60992912499SAlex Bradbury; RV32ID-ILP32D-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 61092912499SAlex Bradbury; RV32ID-ILP32D-NEXT: mv s0, a0 61192912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.x.w a0, fa0 61292912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.x.w a1, fa1 61392912499SAlex Bradbury; RV32ID-ILP32D-NEXT: slli a1, a1, 16 61492912499SAlex Bradbury; RV32ID-ILP32D-NEXT: slli a0, a0, 16 615*9122c523SPengcheng Wang; RV32ID-ILP32D-NEXT: fmv.w.x fa5, a1 61692912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.w.x fa4, a0 61792912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fadd.s fa0, fa4, fa5 618eabaee0cSFangrui Song; RV32ID-ILP32D-NEXT: call __truncsfbf2 61992912499SAlex Bradbury; RV32ID-ILP32D-NEXT: fmv.x.w a0, fa0 62092912499SAlex Bradbury; RV32ID-ILP32D-NEXT: sh a0, 0(s0) 62192912499SAlex Bradbury; RV32ID-ILP32D-NEXT: sh a0, 16(s0) 62292912499SAlex Bradbury; RV32ID-ILP32D-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 62392912499SAlex Bradbury; RV32ID-ILP32D-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 62492912499SAlex Bradbury; RV32ID-ILP32D-NEXT: addi sp, sp, 16 62592912499SAlex Bradbury; RV32ID-ILP32D-NEXT: ret 62692912499SAlex Bradbury; 62792912499SAlex Bradbury; RV64ID-LP64D-LABEL: bfloat_store: 62892912499SAlex Bradbury; RV64ID-LP64D: # %bb.0: 62992912499SAlex Bradbury; RV64ID-LP64D-NEXT: addi sp, sp, -16 63092912499SAlex Bradbury; RV64ID-LP64D-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 63192912499SAlex Bradbury; RV64ID-LP64D-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 63292912499SAlex Bradbury; RV64ID-LP64D-NEXT: mv s0, a0 63392912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.x.w a0, fa0 6349f6bf00bSShao-Ce SUN; RV64ID-LP64D-NEXT: fmv.x.w a1, fa1 63592912499SAlex Bradbury; RV64ID-LP64D-NEXT: slli a1, a1, 16 63692912499SAlex Bradbury; RV64ID-LP64D-NEXT: slli a0, a0, 16 637*9122c523SPengcheng Wang; RV64ID-LP64D-NEXT: fmv.w.x fa5, a1 63892912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.w.x fa4, a0 63992912499SAlex Bradbury; RV64ID-LP64D-NEXT: fadd.s fa0, fa4, fa5 640eabaee0cSFangrui Song; RV64ID-LP64D-NEXT: call __truncsfbf2 64192912499SAlex Bradbury; RV64ID-LP64D-NEXT: fmv.x.w a0, fa0 64292912499SAlex Bradbury; RV64ID-LP64D-NEXT: sh a0, 0(s0) 64392912499SAlex Bradbury; RV64ID-LP64D-NEXT: sh a0, 16(s0) 64492912499SAlex Bradbury; RV64ID-LP64D-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 64592912499SAlex Bradbury; RV64ID-LP64D-NEXT: ld s0, 0(sp) # 8-byte Folded Reload 64692912499SAlex Bradbury; RV64ID-LP64D-NEXT: addi sp, sp, 16 64792912499SAlex Bradbury; RV64ID-LP64D-NEXT: ret 6489bb34ca6SAlex Bradbury %1 = fadd bfloat %b, %c 6499bb34ca6SAlex Bradbury store bfloat %1, ptr %a 6509bb34ca6SAlex Bradbury %2 = getelementptr bfloat, ptr %a, i32 8 6519bb34ca6SAlex Bradbury store bfloat %1, ptr %2 6529bb34ca6SAlex Bradbury ret void 6539bb34ca6SAlex Bradbury} 654