17a1b2adcSAlex Bradbury; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 232597685SJianjian Guan; RUN: llc -mtriple=riscv32 -mattr=+zfbfmin -verify-machineinstrs \ 3380fd820SAlex Bradbury; RUN: -target-abi ilp32f < %s | FileCheck -check-prefixes=CHECK32ZFBFMIN,RV32IZFBFMIN %s 432597685SJianjian Guan; RUN: llc -mtriple=riscv32 -mattr=+d,+zfbfmin -verify-machineinstrs \ 5380fd820SAlex Bradbury; RUN: -target-abi ilp32d < %s | FileCheck -check-prefixes=CHECK32ZFBFMIN,R32IDZFBFMIN %s 6380fd820SAlex Bradbury; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs \ 7380fd820SAlex Bradbury; RUN: -target-abi ilp32d < %s | FileCheck -check-prefixes=RV32ID %s 832597685SJianjian Guan; RUN: llc -mtriple=riscv64 -mattr=+zfbfmin -verify-machineinstrs \ 9380fd820SAlex Bradbury; RUN: -target-abi lp64f < %s | FileCheck -check-prefixes=CHECK64ZFBFMIN,RV64IZFBFMIN %s 1032597685SJianjian Guan; RUN: llc -mtriple=riscv64 -mattr=+d,+zfbfmin -verify-machineinstrs \ 11380fd820SAlex Bradbury; RUN: -target-abi lp64d < %s | FileCheck -check-prefixes=CHECK64ZFBFMIN,RV64IDZFBFMIN %s 12380fd820SAlex Bradbury; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs \ 13380fd820SAlex Bradbury; RUN: -target-abi lp64d < %s | FileCheck -check-prefixes=RV64ID %s 147a1b2adcSAlex Bradbury 157a1b2adcSAlex Bradbury; These tests descend from float-arith.ll, where each function was targeted at 167a1b2adcSAlex Bradbury; a particular RISC-V FPU instruction. 177a1b2adcSAlex Bradbury 187a1b2adcSAlex Bradburydefine i16 @fcvt_si_bf16(bfloat %a) nounwind { 19380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_si_bf16: 20380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 212a9f93bfSCraig Topper; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 22380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.w.s a0, fa5, rtz 23380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 247a1b2adcSAlex Bradbury; 25380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_si_bf16: 26380fd820SAlex Bradbury; RV32ID: # %bb.0: 27380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 28380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 29380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa5, a0 30380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.w.s a0, fa5, rtz 31380fd820SAlex Bradbury; RV32ID-NEXT: ret 32380fd820SAlex Bradbury; 33380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_si_bf16: 34380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 352a9f93bfSCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 36380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.l.s a0, fa5, rtz 37380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 38380fd820SAlex Bradbury; 39380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_si_bf16: 40380fd820SAlex Bradbury; RV64ID: # %bb.0: 41380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 42380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 43380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 44380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.l.s a0, fa5, rtz 45380fd820SAlex Bradbury; RV64ID-NEXT: ret 467a1b2adcSAlex Bradbury %1 = fptosi bfloat %a to i16 477a1b2adcSAlex Bradbury ret i16 %1 487a1b2adcSAlex Bradbury} 497a1b2adcSAlex Bradbury 507a1b2adcSAlex Bradburydefine i16 @fcvt_si_bf16_sat(bfloat %a) nounwind { 51380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_si_bf16_sat: 52380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: # %start 53380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 54*9122c523SPengcheng Wang; CHECK32ZFBFMIN-NEXT: lui a0, %hi(.LCPI1_0) 55*9122c523SPengcheng Wang; CHECK32ZFBFMIN-NEXT: feq.s a1, fa5, fa5 56*9122c523SPengcheng Wang; CHECK32ZFBFMIN-NEXT: flw fa4, %lo(.LCPI1_0)(a0) 57*9122c523SPengcheng Wang; CHECK32ZFBFMIN-NEXT: lui a0, 815104 58*9122c523SPengcheng Wang; CHECK32ZFBFMIN-NEXT: fmv.w.x fa3, a0 59380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fmax.s fa5, fa5, fa3 60*9122c523SPengcheng Wang; CHECK32ZFBFMIN-NEXT: neg a0, a1 61380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fmin.s fa5, fa5, fa4 62380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.w.s a1, fa5, rtz 63380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: and a0, a0, a1 64380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 657a1b2adcSAlex Bradbury; 66380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_si_bf16_sat: 67380fd820SAlex Bradbury; RV32ID: # %bb.0: # %start 68380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 69380fd820SAlex Bradbury; RV32ID-NEXT: lui a1, 815104 70*9122c523SPengcheng Wang; RV32ID-NEXT: fmv.w.x fa5, a1 71*9122c523SPengcheng Wang; RV32ID-NEXT: lui a1, %hi(.LCPI1_0) 72*9122c523SPengcheng Wang; RV32ID-NEXT: slli a0, a0, 16 73*9122c523SPengcheng Wang; RV32ID-NEXT: flw fa4, %lo(.LCPI1_0)(a1) 74*9122c523SPengcheng Wang; RV32ID-NEXT: fmv.w.x fa3, a0 75*9122c523SPengcheng Wang; RV32ID-NEXT: feq.s a0, fa3, fa3 76*9122c523SPengcheng Wang; RV32ID-NEXT: fmax.s fa5, fa3, fa5 77380fd820SAlex Bradbury; RV32ID-NEXT: neg a0, a0 78380fd820SAlex Bradbury; RV32ID-NEXT: fmin.s fa5, fa5, fa4 79380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.w.s a1, fa5, rtz 80380fd820SAlex Bradbury; RV32ID-NEXT: and a0, a0, a1 81380fd820SAlex Bradbury; RV32ID-NEXT: ret 82380fd820SAlex Bradbury; 83380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_si_bf16_sat: 84380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: # %start 85380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 86*9122c523SPengcheng Wang; CHECK64ZFBFMIN-NEXT: lui a0, %hi(.LCPI1_0) 87*9122c523SPengcheng Wang; CHECK64ZFBFMIN-NEXT: feq.s a1, fa5, fa5 88*9122c523SPengcheng Wang; CHECK64ZFBFMIN-NEXT: flw fa4, %lo(.LCPI1_0)(a0) 89*9122c523SPengcheng Wang; CHECK64ZFBFMIN-NEXT: lui a0, 815104 90*9122c523SPengcheng Wang; CHECK64ZFBFMIN-NEXT: fmv.w.x fa3, a0 91380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fmax.s fa5, fa5, fa3 92*9122c523SPengcheng Wang; CHECK64ZFBFMIN-NEXT: neg a0, a1 93380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fmin.s fa5, fa5, fa4 94380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.l.s a1, fa5, rtz 95380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: and a0, a0, a1 96380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 97380fd820SAlex Bradbury; 98380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_si_bf16_sat: 99380fd820SAlex Bradbury; RV64ID: # %bb.0: # %start 100380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 101380fd820SAlex Bradbury; RV64ID-NEXT: lui a1, 815104 102*9122c523SPengcheng Wang; RV64ID-NEXT: fmv.w.x fa5, a1 103*9122c523SPengcheng Wang; RV64ID-NEXT: lui a1, %hi(.LCPI1_0) 104*9122c523SPengcheng Wang; RV64ID-NEXT: slli a0, a0, 16 105*9122c523SPengcheng Wang; RV64ID-NEXT: flw fa4, %lo(.LCPI1_0)(a1) 106*9122c523SPengcheng Wang; RV64ID-NEXT: fmv.w.x fa3, a0 107*9122c523SPengcheng Wang; RV64ID-NEXT: feq.s a0, fa3, fa3 108*9122c523SPengcheng Wang; RV64ID-NEXT: fmax.s fa5, fa3, fa5 109380fd820SAlex Bradbury; RV64ID-NEXT: neg a0, a0 110380fd820SAlex Bradbury; RV64ID-NEXT: fmin.s fa5, fa5, fa4 111380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.l.s a1, fa5, rtz 112380fd820SAlex Bradbury; RV64ID-NEXT: and a0, a0, a1 113380fd820SAlex Bradbury; RV64ID-NEXT: ret 1147a1b2adcSAlex Bradburystart: 1157a1b2adcSAlex Bradbury %0 = tail call i16 @llvm.fptosi.sat.i16.bf16(bfloat %a) 1167a1b2adcSAlex Bradbury ret i16 %0 1177a1b2adcSAlex Bradbury} 1187a1b2adcSAlex Bradburydeclare i16 @llvm.fptosi.sat.i16.bf16(bfloat) 1197a1b2adcSAlex Bradbury 1207a1b2adcSAlex Bradburydefine i16 @fcvt_ui_bf16(bfloat %a) nounwind { 121380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_ui_bf16: 122380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 1232a9f93bfSCraig Topper; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 124db3792b8SCraig Topper; CHECK32ZFBFMIN-NEXT: fcvt.w.s a0, fa5, rtz 125380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 1267a1b2adcSAlex Bradbury; 127380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_ui_bf16: 128380fd820SAlex Bradbury; RV32ID: # %bb.0: 129380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 130380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 131380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa5, a0 132380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.wu.s a0, fa5, rtz 133380fd820SAlex Bradbury; RV32ID-NEXT: ret 134380fd820SAlex Bradbury; 135380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_ui_bf16: 136380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 1372a9f93bfSCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 138db3792b8SCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.l.s a0, fa5, rtz 139380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 140380fd820SAlex Bradbury; 141380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_ui_bf16: 142380fd820SAlex Bradbury; RV64ID: # %bb.0: 143380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 144380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 145380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 146380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.lu.s a0, fa5, rtz 147380fd820SAlex Bradbury; RV64ID-NEXT: ret 1487a1b2adcSAlex Bradbury %1 = fptoui bfloat %a to i16 1497a1b2adcSAlex Bradbury ret i16 %1 1507a1b2adcSAlex Bradbury} 1517a1b2adcSAlex Bradbury 1527a1b2adcSAlex Bradburydefine i16 @fcvt_ui_bf16_sat(bfloat %a) nounwind { 153380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_ui_bf16_sat: 154380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: # %start 155380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: lui a0, %hi(.LCPI3_0) 156380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: flw fa5, %lo(.LCPI3_0)(a0) 157380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa4, fa0 158380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fmv.w.x fa3, zero 159380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fmax.s fa4, fa4, fa3 160380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fmin.s fa5, fa4, fa5 161380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.wu.s a0, fa5, rtz 162380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 1637a1b2adcSAlex Bradbury; 164380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_ui_bf16_sat: 165380fd820SAlex Bradbury; RV32ID: # %bb.0: # %start 166*9122c523SPengcheng Wang; RV32ID-NEXT: lui a0, %hi(.LCPI3_0) 167*9122c523SPengcheng Wang; RV32ID-NEXT: flw fa5, %lo(.LCPI3_0)(a0) 168380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 169380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 170380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa4, a0 171380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa3, zero 172380fd820SAlex Bradbury; RV32ID-NEXT: fmax.s fa4, fa4, fa3 173380fd820SAlex Bradbury; RV32ID-NEXT: fmin.s fa5, fa4, fa5 174380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.wu.s a0, fa5, rtz 175380fd820SAlex Bradbury; RV32ID-NEXT: ret 176380fd820SAlex Bradbury; 177380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_ui_bf16_sat: 178380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: # %start 179380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: lui a0, %hi(.LCPI3_0) 180380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: flw fa5, %lo(.LCPI3_0)(a0) 181380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa4, fa0 182380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fmv.w.x fa3, zero 183380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fmax.s fa4, fa4, fa3 184380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fmin.s fa5, fa4, fa5 185380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.lu.s a0, fa5, rtz 186380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 187380fd820SAlex Bradbury; 188380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_ui_bf16_sat: 189380fd820SAlex Bradbury; RV64ID: # %bb.0: # %start 190*9122c523SPengcheng Wang; RV64ID-NEXT: lui a0, %hi(.LCPI3_0) 191*9122c523SPengcheng Wang; RV64ID-NEXT: flw fa5, %lo(.LCPI3_0)(a0) 192380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 193380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 194380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa4, a0 195380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa3, zero 196380fd820SAlex Bradbury; RV64ID-NEXT: fmax.s fa4, fa4, fa3 197380fd820SAlex Bradbury; RV64ID-NEXT: fmin.s fa5, fa4, fa5 198380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.lu.s a0, fa5, rtz 199380fd820SAlex Bradbury; RV64ID-NEXT: ret 2007a1b2adcSAlex Bradburystart: 2017a1b2adcSAlex Bradbury %0 = tail call i16 @llvm.fptoui.sat.i16.bf16(bfloat %a) 2027a1b2adcSAlex Bradbury ret i16 %0 2037a1b2adcSAlex Bradbury} 2047a1b2adcSAlex Bradburydeclare i16 @llvm.fptoui.sat.i16.bf16(bfloat) 2057a1b2adcSAlex Bradbury 2067a1b2adcSAlex Bradburydefine i32 @fcvt_w_bf16(bfloat %a) nounwind { 207380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_w_bf16: 208380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 2092a9f93bfSCraig Topper; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 210380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.w.s a0, fa5, rtz 211380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 2127a1b2adcSAlex Bradbury; 213380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_w_bf16: 214380fd820SAlex Bradbury; RV32ID: # %bb.0: 215380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 216380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 217380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa5, a0 218380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.w.s a0, fa5, rtz 219380fd820SAlex Bradbury; RV32ID-NEXT: ret 220380fd820SAlex Bradbury; 221380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_w_bf16: 222380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 223380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 224380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.w.s a0, fa5, rtz 225380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 226380fd820SAlex Bradbury; 227380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_w_bf16: 228380fd820SAlex Bradbury; RV64ID: # %bb.0: 229380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 230380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 231380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 232380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.l.s a0, fa5, rtz 233380fd820SAlex Bradbury; RV64ID-NEXT: ret 2347a1b2adcSAlex Bradbury %1 = fptosi bfloat %a to i32 2357a1b2adcSAlex Bradbury ret i32 %1 2367a1b2adcSAlex Bradbury} 2377a1b2adcSAlex Bradbury 2387a1b2adcSAlex Bradburydefine i32 @fcvt_w_bf16_sat(bfloat %a) nounwind { 239380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_w_bf16_sat: 240380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: # %start 241380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 242380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.w.s a0, fa5, rtz 243380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: feq.s a1, fa5, fa5 244380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: seqz a1, a1 245380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: addi a1, a1, -1 246380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: and a0, a1, a0 247380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 2487a1b2adcSAlex Bradbury; 249380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_w_bf16_sat: 250380fd820SAlex Bradbury; RV32ID: # %bb.0: # %start 251380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 252380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 253380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa5, a0 254380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.w.s a0, fa5, rtz 255380fd820SAlex Bradbury; RV32ID-NEXT: feq.s a1, fa5, fa5 256380fd820SAlex Bradbury; RV32ID-NEXT: seqz a1, a1 257380fd820SAlex Bradbury; RV32ID-NEXT: addi a1, a1, -1 258380fd820SAlex Bradbury; RV32ID-NEXT: and a0, a1, a0 259380fd820SAlex Bradbury; RV32ID-NEXT: ret 260380fd820SAlex Bradbury; 261380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_w_bf16_sat: 262380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: # %start 263380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 264380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.w.s a0, fa5, rtz 265380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: feq.s a1, fa5, fa5 266380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: seqz a1, a1 267380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: addi a1, a1, -1 268380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: and a0, a1, a0 269380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 270380fd820SAlex Bradbury; 271380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_w_bf16_sat: 272380fd820SAlex Bradbury; RV64ID: # %bb.0: # %start 273380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 274380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 275380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 276380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.w.s a0, fa5, rtz 277380fd820SAlex Bradbury; RV64ID-NEXT: feq.s a1, fa5, fa5 278380fd820SAlex Bradbury; RV64ID-NEXT: seqz a1, a1 279380fd820SAlex Bradbury; RV64ID-NEXT: addi a1, a1, -1 280380fd820SAlex Bradbury; RV64ID-NEXT: and a0, a1, a0 281380fd820SAlex Bradbury; RV64ID-NEXT: ret 2827a1b2adcSAlex Bradburystart: 2837a1b2adcSAlex Bradbury %0 = tail call i32 @llvm.fptosi.sat.i32.bf16(bfloat %a) 2847a1b2adcSAlex Bradbury ret i32 %0 2857a1b2adcSAlex Bradbury} 2867a1b2adcSAlex Bradburydeclare i32 @llvm.fptosi.sat.i32.bf16(bfloat) 2877a1b2adcSAlex Bradbury 2887a1b2adcSAlex Bradburydefine i32 @fcvt_wu_bf16(bfloat %a) nounwind { 289380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_wu_bf16: 290380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 2912a9f93bfSCraig Topper; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 292380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.wu.s a0, fa5, rtz 293380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 2947a1b2adcSAlex Bradbury; 295380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_wu_bf16: 296380fd820SAlex Bradbury; RV32ID: # %bb.0: 297380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 298380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 299380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa5, a0 300380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.wu.s a0, fa5, rtz 301380fd820SAlex Bradbury; RV32ID-NEXT: ret 302380fd820SAlex Bradbury; 303380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_wu_bf16: 304380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 305380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 306380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.wu.s a0, fa5, rtz 307380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 308380fd820SAlex Bradbury; 309380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_wu_bf16: 310380fd820SAlex Bradbury; RV64ID: # %bb.0: 311380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 312380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 313380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 314380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.lu.s a0, fa5, rtz 315380fd820SAlex Bradbury; RV64ID-NEXT: ret 3167a1b2adcSAlex Bradbury %1 = fptoui bfloat %a to i32 3177a1b2adcSAlex Bradbury ret i32 %1 3187a1b2adcSAlex Bradbury} 3197a1b2adcSAlex Bradbury 3207a1b2adcSAlex Bradburydefine i32 @fcvt_wu_bf16_multiple_use(bfloat %x, ptr %y) nounwind { 321380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_wu_bf16_multiple_use: 322380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 3232a9f93bfSCraig Topper; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 324380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.wu.s a0, fa5, rtz 325380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: seqz a1, a0 326380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: add a0, a0, a1 327380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 3287a1b2adcSAlex Bradbury; 329380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_wu_bf16_multiple_use: 330380fd820SAlex Bradbury; RV32ID: # %bb.0: 331380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 332380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 333380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa5, a0 334380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.wu.s a0, fa5, rtz 335380fd820SAlex Bradbury; RV32ID-NEXT: seqz a1, a0 336380fd820SAlex Bradbury; RV32ID-NEXT: add a0, a0, a1 337380fd820SAlex Bradbury; RV32ID-NEXT: ret 338380fd820SAlex Bradbury; 339380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_wu_bf16_multiple_use: 340380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 341380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 342380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.wu.s a0, fa5, rtz 343380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: seqz a1, a0 344380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: add a0, a0, a1 345380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 346380fd820SAlex Bradbury; 347380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_wu_bf16_multiple_use: 348380fd820SAlex Bradbury; RV64ID: # %bb.0: 349380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 350380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 351380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 352380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.lu.s a0, fa5, rtz 353380fd820SAlex Bradbury; RV64ID-NEXT: seqz a1, a0 354380fd820SAlex Bradbury; RV64ID-NEXT: add a0, a0, a1 355380fd820SAlex Bradbury; RV64ID-NEXT: ret 3567a1b2adcSAlex Bradbury %a = fptoui bfloat %x to i32 3577a1b2adcSAlex Bradbury %b = icmp eq i32 %a, 0 3587a1b2adcSAlex Bradbury %c = select i1 %b, i32 1, i32 %a 3597a1b2adcSAlex Bradbury ret i32 %c 3607a1b2adcSAlex Bradbury} 3617a1b2adcSAlex Bradbury 3627a1b2adcSAlex Bradburydefine i32 @fcvt_wu_bf16_sat(bfloat %a) nounwind { 363380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_wu_bf16_sat: 364380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: # %start 365380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 366380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.wu.s a0, fa5, rtz 367380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: feq.s a1, fa5, fa5 368380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: seqz a1, a1 369380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: addi a1, a1, -1 370380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: and a0, a1, a0 371380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 3727a1b2adcSAlex Bradbury; 373380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_wu_bf16_sat: 374380fd820SAlex Bradbury; RV32ID: # %bb.0: # %start 375380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 376380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 377380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa5, a0 378380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.wu.s a0, fa5, rtz 379380fd820SAlex Bradbury; RV32ID-NEXT: feq.s a1, fa5, fa5 380380fd820SAlex Bradbury; RV32ID-NEXT: seqz a1, a1 381380fd820SAlex Bradbury; RV32ID-NEXT: addi a1, a1, -1 382380fd820SAlex Bradbury; RV32ID-NEXT: and a0, a1, a0 383380fd820SAlex Bradbury; RV32ID-NEXT: ret 384380fd820SAlex Bradbury; 385380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_wu_bf16_sat: 386380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: # %start 387380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 388380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.wu.s a0, fa5, rtz 389380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: feq.s a1, fa5, fa5 390380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: seqz a1, a1 39186240751SPhilip Reames; CHECK64ZFBFMIN-NEXT: addi a1, a1, -1 392380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: and a0, a0, a1 393380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: slli a0, a0, 32 394380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: srli a0, a0, 32 395380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 396380fd820SAlex Bradbury; 397380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_wu_bf16_sat: 398380fd820SAlex Bradbury; RV64ID: # %bb.0: # %start 399380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 400380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 401380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 402380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.wu.s a0, fa5, rtz 403380fd820SAlex Bradbury; RV64ID-NEXT: feq.s a1, fa5, fa5 404380fd820SAlex Bradbury; RV64ID-NEXT: seqz a1, a1 40586240751SPhilip Reames; RV64ID-NEXT: addi a1, a1, -1 406380fd820SAlex Bradbury; RV64ID-NEXT: and a0, a0, a1 407380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 32 408380fd820SAlex Bradbury; RV64ID-NEXT: srli a0, a0, 32 409380fd820SAlex Bradbury; RV64ID-NEXT: ret 4107a1b2adcSAlex Bradburystart: 4117a1b2adcSAlex Bradbury %0 = tail call i32 @llvm.fptoui.sat.i32.bf16(bfloat %a) 4127a1b2adcSAlex Bradbury ret i32 %0 4137a1b2adcSAlex Bradbury} 4147a1b2adcSAlex Bradburydeclare i32 @llvm.fptoui.sat.i32.bf16(bfloat) 4157a1b2adcSAlex Bradbury 416f7dbc850SAlex Bradburydefine i64 @fcvt_l_bf16(bfloat %a) nounwind { 417f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_l_bf16: 418f7dbc850SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 419f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: addi sp, sp, -16 420f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 421f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa0, fa0 422eabaee0cSFangrui Song; CHECK32ZFBFMIN-NEXT: call __fixsfdi 423f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 424f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: addi sp, sp, 16 425f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 426f7dbc850SAlex Bradbury; 427f7dbc850SAlex Bradbury; RV32ID-LABEL: fcvt_l_bf16: 428f7dbc850SAlex Bradbury; RV32ID: # %bb.0: 429f7dbc850SAlex Bradbury; RV32ID-NEXT: addi sp, sp, -16 430f7dbc850SAlex Bradbury; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 43189b8ebf3SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 43289b8ebf3SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 43389b8ebf3SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa0, a0 434eabaee0cSFangrui Song; RV32ID-NEXT: call __fixsfdi 435f7dbc850SAlex Bradbury; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 436f7dbc850SAlex Bradbury; RV32ID-NEXT: addi sp, sp, 16 437f7dbc850SAlex Bradbury; RV32ID-NEXT: ret 438f7dbc850SAlex Bradbury; 439f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_l_bf16: 440f7dbc850SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 4412a9f93bfSCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 442f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.l.s a0, fa5, rtz 443f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 444f7dbc850SAlex Bradbury; 445f7dbc850SAlex Bradbury; RV64ID-LABEL: fcvt_l_bf16: 446f7dbc850SAlex Bradbury; RV64ID: # %bb.0: 447f7dbc850SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 448f7dbc850SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 449f7dbc850SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 450f7dbc850SAlex Bradbury; RV64ID-NEXT: fcvt.l.s a0, fa5, rtz 451f7dbc850SAlex Bradbury; RV64ID-NEXT: ret 452f7dbc850SAlex Bradbury %1 = fptosi bfloat %a to i64 453f7dbc850SAlex Bradbury ret i64 %1 454f7dbc850SAlex Bradbury} 4557a1b2adcSAlex Bradbury 456f7dbc850SAlex Bradburydefine i64 @fcvt_l_bf16_sat(bfloat %a) nounwind { 457f7dbc850SAlex Bradbury; RV32IZFBFMIN-LABEL: fcvt_l_bf16_sat: 458f7dbc850SAlex Bradbury; RV32IZFBFMIN: # %bb.0: # %start 45955c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: addi sp, sp, -16 46055c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 46155c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 46255c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: fsw fs0, 4(sp) # 4-byte Folded Spill 463f7dbc850SAlex Bradbury; RV32IZFBFMIN-NEXT: fcvt.s.bf16 fs0, fa0 464f7dbc850SAlex Bradbury; RV32IZFBFMIN-NEXT: lui a0, 913408 465f7dbc850SAlex Bradbury; RV32IZFBFMIN-NEXT: fmv.w.x fa5, a0 46655c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: fle.s s0, fa5, fs0 467f7dbc850SAlex Bradbury; RV32IZFBFMIN-NEXT: fmv.s fa0, fs0 468eabaee0cSFangrui Song; RV32IZFBFMIN-NEXT: call __fixsfdi 469*9122c523SPengcheng Wang; RV32IZFBFMIN-NEXT: lui a3, 524288 47055c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: lui a2, 524288 47155c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: beqz s0, .LBB10_2 472f7dbc850SAlex Bradbury; RV32IZFBFMIN-NEXT: # %bb.1: # %start 47355c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: mv a2, a1 474f7dbc850SAlex Bradbury; RV32IZFBFMIN-NEXT: .LBB10_2: # %start 47555c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: lui a1, %hi(.LCPI10_0) 47655c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: flw fa5, %lo(.LCPI10_0)(a1) 477*9122c523SPengcheng Wang; RV32IZFBFMIN-NEXT: flt.s a1, fa5, fs0 478*9122c523SPengcheng Wang; RV32IZFBFMIN-NEXT: beqz a1, .LBB10_4 479f7dbc850SAlex Bradbury; RV32IZFBFMIN-NEXT: # %bb.3: 480*9122c523SPengcheng Wang; RV32IZFBFMIN-NEXT: addi a2, a3, -1 481f7dbc850SAlex Bradbury; RV32IZFBFMIN-NEXT: .LBB10_4: # %start 482*9122c523SPengcheng Wang; RV32IZFBFMIN-NEXT: feq.s a3, fs0, fs0 48355c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: neg a4, a1 484*9122c523SPengcheng Wang; RV32IZFBFMIN-NEXT: neg a1, s0 485*9122c523SPengcheng Wang; RV32IZFBFMIN-NEXT: neg a3, a3 486*9122c523SPengcheng Wang; RV32IZFBFMIN-NEXT: and a0, a1, a0 487*9122c523SPengcheng Wang; RV32IZFBFMIN-NEXT: and a1, a3, a2 488*9122c523SPengcheng Wang; RV32IZFBFMIN-NEXT: or a0, a4, a0 48955c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: and a0, a3, a0 49055c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 49155c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 49255c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: flw fs0, 4(sp) # 4-byte Folded Reload 49355c6bda0SBjorn Pettersson; RV32IZFBFMIN-NEXT: addi sp, sp, 16 494f7dbc850SAlex Bradbury; RV32IZFBFMIN-NEXT: ret 495f7dbc850SAlex Bradbury; 496f7dbc850SAlex Bradbury; R32IDZFBFMIN-LABEL: fcvt_l_bf16_sat: 497f7dbc850SAlex Bradbury; R32IDZFBFMIN: # %bb.0: # %start 49855c6bda0SBjorn Pettersson; R32IDZFBFMIN-NEXT: addi sp, sp, -16 49955c6bda0SBjorn Pettersson; R32IDZFBFMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 50055c6bda0SBjorn Pettersson; R32IDZFBFMIN-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 501f7dbc850SAlex Bradbury; R32IDZFBFMIN-NEXT: fsd fs0, 0(sp) # 8-byte Folded Spill 502f7dbc850SAlex Bradbury; R32IDZFBFMIN-NEXT: fcvt.s.bf16 fs0, fa0 503f7dbc850SAlex Bradbury; R32IDZFBFMIN-NEXT: lui a0, 913408 504f7dbc850SAlex Bradbury; R32IDZFBFMIN-NEXT: fmv.w.x fa5, a0 50555c6bda0SBjorn Pettersson; R32IDZFBFMIN-NEXT: fle.s s0, fa5, fs0 506f7dbc850SAlex Bradbury; R32IDZFBFMIN-NEXT: fmv.s fa0, fs0 507eabaee0cSFangrui Song; R32IDZFBFMIN-NEXT: call __fixsfdi 508*9122c523SPengcheng Wang; R32IDZFBFMIN-NEXT: lui a3, 524288 50955c6bda0SBjorn Pettersson; R32IDZFBFMIN-NEXT: lui a2, 524288 51055c6bda0SBjorn Pettersson; R32IDZFBFMIN-NEXT: beqz s0, .LBB10_2 511f7dbc850SAlex Bradbury; R32IDZFBFMIN-NEXT: # %bb.1: # %start 51255c6bda0SBjorn Pettersson; R32IDZFBFMIN-NEXT: mv a2, a1 513f7dbc850SAlex Bradbury; R32IDZFBFMIN-NEXT: .LBB10_2: # %start 51455c6bda0SBjorn Pettersson; R32IDZFBFMIN-NEXT: lui a1, %hi(.LCPI10_0) 51555c6bda0SBjorn Pettersson; R32IDZFBFMIN-NEXT: flw fa5, %lo(.LCPI10_0)(a1) 516*9122c523SPengcheng Wang; R32IDZFBFMIN-NEXT: flt.s a1, fa5, fs0 517*9122c523SPengcheng Wang; R32IDZFBFMIN-NEXT: beqz a1, .LBB10_4 518f7dbc850SAlex Bradbury; R32IDZFBFMIN-NEXT: # %bb.3: 519*9122c523SPengcheng Wang; R32IDZFBFMIN-NEXT: addi a2, a3, -1 520f7dbc850SAlex Bradbury; R32IDZFBFMIN-NEXT: .LBB10_4: # %start 521*9122c523SPengcheng Wang; R32IDZFBFMIN-NEXT: feq.s a3, fs0, fs0 52255c6bda0SBjorn Pettersson; R32IDZFBFMIN-NEXT: neg a4, a1 523*9122c523SPengcheng Wang; R32IDZFBFMIN-NEXT: neg a1, s0 524*9122c523SPengcheng Wang; R32IDZFBFMIN-NEXT: neg a3, a3 525*9122c523SPengcheng Wang; R32IDZFBFMIN-NEXT: and a0, a1, a0 526*9122c523SPengcheng Wang; R32IDZFBFMIN-NEXT: and a1, a3, a2 527*9122c523SPengcheng Wang; R32IDZFBFMIN-NEXT: or a0, a4, a0 52855c6bda0SBjorn Pettersson; R32IDZFBFMIN-NEXT: and a0, a3, a0 52955c6bda0SBjorn Pettersson; R32IDZFBFMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 53055c6bda0SBjorn Pettersson; R32IDZFBFMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 531f7dbc850SAlex Bradbury; R32IDZFBFMIN-NEXT: fld fs0, 0(sp) # 8-byte Folded Reload 53255c6bda0SBjorn Pettersson; R32IDZFBFMIN-NEXT: addi sp, sp, 16 533f7dbc850SAlex Bradbury; R32IDZFBFMIN-NEXT: ret 534f7dbc850SAlex Bradbury; 535f7dbc850SAlex Bradbury; RV32ID-LABEL: fcvt_l_bf16_sat: 536f7dbc850SAlex Bradbury; RV32ID: # %bb.0: # %start 5376b270358SCraig Topper; RV32ID-NEXT: addi sp, sp, -16 5386b270358SCraig Topper; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5396b270358SCraig Topper; RV32ID-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 540f7dbc850SAlex Bradbury; RV32ID-NEXT: fsd fs0, 0(sp) # 8-byte Folded Spill 541f7dbc850SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 542f7dbc850SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 543f7dbc850SAlex Bradbury; RV32ID-NEXT: fmv.w.x fs0, a0 544f7dbc850SAlex Bradbury; RV32ID-NEXT: lui a0, 913408 545f7dbc850SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa5, a0 5466b270358SCraig Topper; RV32ID-NEXT: fle.s s0, fa5, fs0 547f7dbc850SAlex Bradbury; RV32ID-NEXT: fmv.s fa0, fs0 548eabaee0cSFangrui Song; RV32ID-NEXT: call __fixsfdi 549*9122c523SPengcheng Wang; RV32ID-NEXT: lui a3, 524288 5506b270358SCraig Topper; RV32ID-NEXT: lui a2, 524288 5516b270358SCraig Topper; RV32ID-NEXT: beqz s0, .LBB10_2 552f7dbc850SAlex Bradbury; RV32ID-NEXT: # %bb.1: # %start 5536b270358SCraig Topper; RV32ID-NEXT: mv a2, a1 554f7dbc850SAlex Bradbury; RV32ID-NEXT: .LBB10_2: # %start 5556b270358SCraig Topper; RV32ID-NEXT: lui a1, %hi(.LCPI10_0) 5566b270358SCraig Topper; RV32ID-NEXT: flw fa5, %lo(.LCPI10_0)(a1) 557*9122c523SPengcheng Wang; RV32ID-NEXT: flt.s a1, fa5, fs0 558*9122c523SPengcheng Wang; RV32ID-NEXT: beqz a1, .LBB10_4 559f7dbc850SAlex Bradbury; RV32ID-NEXT: # %bb.3: 560*9122c523SPengcheng Wang; RV32ID-NEXT: addi a2, a3, -1 561f7dbc850SAlex Bradbury; RV32ID-NEXT: .LBB10_4: # %start 562*9122c523SPengcheng Wang; RV32ID-NEXT: feq.s a3, fs0, fs0 5636b270358SCraig Topper; RV32ID-NEXT: neg a4, a1 564*9122c523SPengcheng Wang; RV32ID-NEXT: neg a1, s0 565*9122c523SPengcheng Wang; RV32ID-NEXT: neg a3, a3 566*9122c523SPengcheng Wang; RV32ID-NEXT: and a0, a1, a0 567*9122c523SPengcheng Wang; RV32ID-NEXT: and a1, a3, a2 568*9122c523SPengcheng Wang; RV32ID-NEXT: or a0, a4, a0 5696b270358SCraig Topper; RV32ID-NEXT: and a0, a3, a0 5706b270358SCraig Topper; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5716b270358SCraig Topper; RV32ID-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 572f7dbc850SAlex Bradbury; RV32ID-NEXT: fld fs0, 0(sp) # 8-byte Folded Reload 5736b270358SCraig Topper; RV32ID-NEXT: addi sp, sp, 16 574f7dbc850SAlex Bradbury; RV32ID-NEXT: ret 575f7dbc850SAlex Bradbury; 576f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_l_bf16_sat: 577f7dbc850SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: # %start 578f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 579f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.l.s a0, fa5, rtz 580f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: feq.s a1, fa5, fa5 581f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: seqz a1, a1 582f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: addi a1, a1, -1 583f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: and a0, a1, a0 584f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 585f7dbc850SAlex Bradbury; 586f7dbc850SAlex Bradbury; RV64ID-LABEL: fcvt_l_bf16_sat: 587f7dbc850SAlex Bradbury; RV64ID: # %bb.0: # %start 588f7dbc850SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 589f7dbc850SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 590f7dbc850SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 591f7dbc850SAlex Bradbury; RV64ID-NEXT: fcvt.l.s a0, fa5, rtz 592f7dbc850SAlex Bradbury; RV64ID-NEXT: feq.s a1, fa5, fa5 593f7dbc850SAlex Bradbury; RV64ID-NEXT: seqz a1, a1 594f7dbc850SAlex Bradbury; RV64ID-NEXT: addi a1, a1, -1 595f7dbc850SAlex Bradbury; RV64ID-NEXT: and a0, a1, a0 596f7dbc850SAlex Bradbury; RV64ID-NEXT: ret 597f7dbc850SAlex Bradburystart: 598f7dbc850SAlex Bradbury %0 = tail call i64 @llvm.fptosi.sat.i64.bf16(bfloat %a) 599f7dbc850SAlex Bradbury ret i64 %0 600f7dbc850SAlex Bradbury} 601f7dbc850SAlex Bradburydeclare i64 @llvm.fptosi.sat.i64.bf16(bfloat) 6027a1b2adcSAlex Bradbury 603f7dbc850SAlex Bradburydefine i64 @fcvt_lu_bf16(bfloat %a) nounwind { 604f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_lu_bf16: 605f7dbc850SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 606f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: addi sp, sp, -16 607f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 608f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa0, fa0 609eabaee0cSFangrui Song; CHECK32ZFBFMIN-NEXT: call __fixunssfdi 610f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 611f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: addi sp, sp, 16 612f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 613f7dbc850SAlex Bradbury; 614f7dbc850SAlex Bradbury; RV32ID-LABEL: fcvt_lu_bf16: 615f7dbc850SAlex Bradbury; RV32ID: # %bb.0: 616f7dbc850SAlex Bradbury; RV32ID-NEXT: addi sp, sp, -16 617f7dbc850SAlex Bradbury; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 61889b8ebf3SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 61989b8ebf3SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 62089b8ebf3SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa0, a0 621eabaee0cSFangrui Song; RV32ID-NEXT: call __fixunssfdi 622f7dbc850SAlex Bradbury; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 623f7dbc850SAlex Bradbury; RV32ID-NEXT: addi sp, sp, 16 624f7dbc850SAlex Bradbury; RV32ID-NEXT: ret 625f7dbc850SAlex Bradbury; 626f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_lu_bf16: 627f7dbc850SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 6282a9f93bfSCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 629f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.lu.s a0, fa5, rtz 630f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 631f7dbc850SAlex Bradbury; 632f7dbc850SAlex Bradbury; RV64ID-LABEL: fcvt_lu_bf16: 633f7dbc850SAlex Bradbury; RV64ID: # %bb.0: 634f7dbc850SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 635f7dbc850SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 636f7dbc850SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 637f7dbc850SAlex Bradbury; RV64ID-NEXT: fcvt.lu.s a0, fa5, rtz 638f7dbc850SAlex Bradbury; RV64ID-NEXT: ret 639f7dbc850SAlex Bradbury %1 = fptoui bfloat %a to i64 640f7dbc850SAlex Bradbury ret i64 %1 641f7dbc850SAlex Bradbury} 642f7dbc850SAlex Bradbury 643f7dbc850SAlex Bradburydefine i64 @fcvt_lu_bf16_sat(bfloat %a) nounwind { 644f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_lu_bf16_sat: 645f7dbc850SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: # %start 646f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: addi sp, sp, -16 647f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 648f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 649f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: sw s1, 4(sp) # 4-byte Folded Spill 650f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: lui a0, %hi(.LCPI12_0) 651f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: flw fa5, %lo(.LCPI12_0)(a0) 652f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa0, fa0 653*9122c523SPengcheng Wang; CHECK32ZFBFMIN-NEXT: fmv.w.x fa4, zero 654*9122c523SPengcheng Wang; CHECK32ZFBFMIN-NEXT: fle.s a0, fa4, fa0 655*9122c523SPengcheng Wang; CHECK32ZFBFMIN-NEXT: flt.s a1, fa5, fa0 656*9122c523SPengcheng Wang; CHECK32ZFBFMIN-NEXT: neg s0, a1 6576b270358SCraig Topper; CHECK32ZFBFMIN-NEXT: neg s1, a0 658eabaee0cSFangrui Song; CHECK32ZFBFMIN-NEXT: call __fixunssfdi 659f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: and a0, s1, a0 660f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: and a1, s1, a1 661*9122c523SPengcheng Wang; CHECK32ZFBFMIN-NEXT: or a0, s0, a0 662f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: or a1, s0, a1 663f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 664f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 665f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: lw s1, 4(sp) # 4-byte Folded Reload 666f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: addi sp, sp, 16 667f7dbc850SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 668f7dbc850SAlex Bradbury; 669f7dbc850SAlex Bradbury; RV32ID-LABEL: fcvt_lu_bf16_sat: 670f7dbc850SAlex Bradbury; RV32ID: # %bb.0: # %start 671f7dbc850SAlex Bradbury; RV32ID-NEXT: addi sp, sp, -16 672f7dbc850SAlex Bradbury; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 673f7dbc850SAlex Bradbury; RV32ID-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 674f7dbc850SAlex Bradbury; RV32ID-NEXT: sw s1, 4(sp) # 4-byte Folded Spill 675f7dbc850SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 676*9122c523SPengcheng Wang; RV32ID-NEXT: lui a1, %hi(.LCPI12_0) 677*9122c523SPengcheng Wang; RV32ID-NEXT: fmv.w.x fa5, zero 678*9122c523SPengcheng Wang; RV32ID-NEXT: flw fa4, %lo(.LCPI12_0)(a1) 679f7dbc850SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 680f7dbc850SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa0, a0 681f7dbc850SAlex Bradbury; RV32ID-NEXT: fle.s a0, fa5, fa0 682*9122c523SPengcheng Wang; RV32ID-NEXT: flt.s a1, fa4, fa0 683*9122c523SPengcheng Wang; RV32ID-NEXT: neg s0, a1 6846b270358SCraig Topper; RV32ID-NEXT: neg s1, a0 685eabaee0cSFangrui Song; RV32ID-NEXT: call __fixunssfdi 686f7dbc850SAlex Bradbury; RV32ID-NEXT: and a0, s1, a0 687f7dbc850SAlex Bradbury; RV32ID-NEXT: and a1, s1, a1 688*9122c523SPengcheng Wang; RV32ID-NEXT: or a0, s0, a0 689f7dbc850SAlex Bradbury; RV32ID-NEXT: or a1, s0, a1 690f7dbc850SAlex Bradbury; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 691f7dbc850SAlex Bradbury; RV32ID-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 692f7dbc850SAlex Bradbury; RV32ID-NEXT: lw s1, 4(sp) # 4-byte Folded Reload 693f7dbc850SAlex Bradbury; RV32ID-NEXT: addi sp, sp, 16 694f7dbc850SAlex Bradbury; RV32ID-NEXT: ret 695f7dbc850SAlex Bradbury; 696f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_lu_bf16_sat: 697f7dbc850SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: # %start 698f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 699f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.lu.s a0, fa5, rtz 700f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: feq.s a1, fa5, fa5 701f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: seqz a1, a1 702f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: addi a1, a1, -1 703f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: and a0, a1, a0 704f7dbc850SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 705f7dbc850SAlex Bradbury; 706f7dbc850SAlex Bradbury; RV64ID-LABEL: fcvt_lu_bf16_sat: 707f7dbc850SAlex Bradbury; RV64ID: # %bb.0: # %start 708f7dbc850SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 709f7dbc850SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 710f7dbc850SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 711f7dbc850SAlex Bradbury; RV64ID-NEXT: fcvt.lu.s a0, fa5, rtz 712f7dbc850SAlex Bradbury; RV64ID-NEXT: feq.s a1, fa5, fa5 713f7dbc850SAlex Bradbury; RV64ID-NEXT: seqz a1, a1 714f7dbc850SAlex Bradbury; RV64ID-NEXT: addi a1, a1, -1 715f7dbc850SAlex Bradbury; RV64ID-NEXT: and a0, a1, a0 716f7dbc850SAlex Bradbury; RV64ID-NEXT: ret 717f7dbc850SAlex Bradburystart: 718f7dbc850SAlex Bradbury %0 = tail call i64 @llvm.fptoui.sat.i64.bf16(bfloat %a) 719f7dbc850SAlex Bradbury ret i64 %0 720f7dbc850SAlex Bradbury} 721f7dbc850SAlex Bradburydeclare i64 @llvm.fptoui.sat.i64.bf16(bfloat) 7227a1b2adcSAlex Bradbury 7237a1b2adcSAlex Bradburydefine bfloat @fcvt_bf16_si(i16 %a) nounwind { 724380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_bf16_si: 725380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 726380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: slli a0, a0, 16 727380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: srai a0, a0, 16 728380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.w fa5, a0 729380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 730380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 7317a1b2adcSAlex Bradbury; 732380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_bf16_si: 733380fd820SAlex Bradbury; RV32ID: # %bb.0: 734380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, -16 735380fd820SAlex Bradbury; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 736380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 737380fd820SAlex Bradbury; RV32ID-NEXT: srai a0, a0, 16 738380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.s.w fa0, a0 739eabaee0cSFangrui Song; RV32ID-NEXT: call __truncsfbf2 740380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 741380fd820SAlex Bradbury; RV32ID-NEXT: lui a1, 1048560 742380fd820SAlex Bradbury; RV32ID-NEXT: or a0, a0, a1 743380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa0, a0 744380fd820SAlex Bradbury; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 745380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, 16 746380fd820SAlex Bradbury; RV32ID-NEXT: ret 747380fd820SAlex Bradbury; 748380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_bf16_si: 749380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 750380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: slli a0, a0, 48 751380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: srai a0, a0, 48 752ec8e1c62SCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.w fa5, a0 753380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 754380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 755380fd820SAlex Bradbury; 756380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_bf16_si: 757380fd820SAlex Bradbury; RV64ID: # %bb.0: 758380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, -16 759380fd820SAlex Bradbury; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 760380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 48 761380fd820SAlex Bradbury; RV64ID-NEXT: srai a0, a0, 48 762380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.s.w fa0, a0 763eabaee0cSFangrui Song; RV64ID-NEXT: call __truncsfbf2 764380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 765380fd820SAlex Bradbury; RV64ID-NEXT: lui a1, 1048560 766380fd820SAlex Bradbury; RV64ID-NEXT: or a0, a0, a1 767380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa0, a0 768380fd820SAlex Bradbury; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 769380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, 16 770380fd820SAlex Bradbury; RV64ID-NEXT: ret 7717a1b2adcSAlex Bradbury %1 = sitofp i16 %a to bfloat 7727a1b2adcSAlex Bradbury ret bfloat %1 7737a1b2adcSAlex Bradbury} 7747a1b2adcSAlex Bradbury 7757a1b2adcSAlex Bradburydefine bfloat @fcvt_bf16_si_signext(i16 signext %a) nounwind { 776380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_bf16_si_signext: 777380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 778380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.w fa5, a0 779380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 780380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 7817a1b2adcSAlex Bradbury; 782380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_bf16_si_signext: 783380fd820SAlex Bradbury; RV32ID: # %bb.0: 784380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, -16 785380fd820SAlex Bradbury; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 786380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.s.w fa0, a0 787eabaee0cSFangrui Song; RV32ID-NEXT: call __truncsfbf2 788380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 789380fd820SAlex Bradbury; RV32ID-NEXT: lui a1, 1048560 790380fd820SAlex Bradbury; RV32ID-NEXT: or a0, a0, a1 791380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa0, a0 792380fd820SAlex Bradbury; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 793380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, 16 794380fd820SAlex Bradbury; RV32ID-NEXT: ret 795380fd820SAlex Bradbury; 796380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_bf16_si_signext: 797380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 798ec8e1c62SCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.w fa5, a0 799380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 800380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 801380fd820SAlex Bradbury; 802380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_bf16_si_signext: 803380fd820SAlex Bradbury; RV64ID: # %bb.0: 804380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, -16 805380fd820SAlex Bradbury; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 806380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.s.w fa0, a0 807eabaee0cSFangrui Song; RV64ID-NEXT: call __truncsfbf2 808380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 809380fd820SAlex Bradbury; RV64ID-NEXT: lui a1, 1048560 810380fd820SAlex Bradbury; RV64ID-NEXT: or a0, a0, a1 811380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa0, a0 812380fd820SAlex Bradbury; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 813380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, 16 814380fd820SAlex Bradbury; RV64ID-NEXT: ret 8157a1b2adcSAlex Bradbury %1 = sitofp i16 %a to bfloat 8167a1b2adcSAlex Bradbury ret bfloat %1 8177a1b2adcSAlex Bradbury} 8187a1b2adcSAlex Bradbury 8197a1b2adcSAlex Bradburydefine bfloat @fcvt_bf16_ui(i16 %a) nounwind { 820380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_bf16_ui: 821380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 822380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: slli a0, a0, 16 823380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: srli a0, a0, 16 824380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.wu fa5, a0 825380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 826380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 8277a1b2adcSAlex Bradbury; 828380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_bf16_ui: 829380fd820SAlex Bradbury; RV32ID: # %bb.0: 830380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, -16 831380fd820SAlex Bradbury; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 832380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 833380fd820SAlex Bradbury; RV32ID-NEXT: srli a0, a0, 16 834380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.s.wu fa0, a0 835eabaee0cSFangrui Song; RV32ID-NEXT: call __truncsfbf2 836380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 837380fd820SAlex Bradbury; RV32ID-NEXT: lui a1, 1048560 838380fd820SAlex Bradbury; RV32ID-NEXT: or a0, a0, a1 839380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa0, a0 840380fd820SAlex Bradbury; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 841380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, 16 842380fd820SAlex Bradbury; RV32ID-NEXT: ret 843380fd820SAlex Bradbury; 844380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_bf16_ui: 845380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 846380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: slli a0, a0, 48 847380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: srli a0, a0, 48 848ec8e1c62SCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.wu fa5, a0 849380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 850380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 851380fd820SAlex Bradbury; 852380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_bf16_ui: 853380fd820SAlex Bradbury; RV64ID: # %bb.0: 854380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, -16 855380fd820SAlex Bradbury; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 856380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 48 857380fd820SAlex Bradbury; RV64ID-NEXT: srli a0, a0, 48 858380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.s.wu fa0, a0 859eabaee0cSFangrui Song; RV64ID-NEXT: call __truncsfbf2 860380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 861380fd820SAlex Bradbury; RV64ID-NEXT: lui a1, 1048560 862380fd820SAlex Bradbury; RV64ID-NEXT: or a0, a0, a1 863380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa0, a0 864380fd820SAlex Bradbury; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 865380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, 16 866380fd820SAlex Bradbury; RV64ID-NEXT: ret 8677a1b2adcSAlex Bradbury %1 = uitofp i16 %a to bfloat 8687a1b2adcSAlex Bradbury ret bfloat %1 8697a1b2adcSAlex Bradbury} 8707a1b2adcSAlex Bradbury 8717a1b2adcSAlex Bradburydefine bfloat @fcvt_bf16_ui_zeroext(i16 zeroext %a) nounwind { 872380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_bf16_ui_zeroext: 873380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 874380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.wu fa5, a0 875380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 876380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 8777a1b2adcSAlex Bradbury; 878380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_bf16_ui_zeroext: 879380fd820SAlex Bradbury; RV32ID: # %bb.0: 880380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, -16 881380fd820SAlex Bradbury; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 882380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.s.wu fa0, a0 883eabaee0cSFangrui Song; RV32ID-NEXT: call __truncsfbf2 884380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 885380fd820SAlex Bradbury; RV32ID-NEXT: lui a1, 1048560 886380fd820SAlex Bradbury; RV32ID-NEXT: or a0, a0, a1 887380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa0, a0 888380fd820SAlex Bradbury; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 889380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, 16 890380fd820SAlex Bradbury; RV32ID-NEXT: ret 891380fd820SAlex Bradbury; 892380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_bf16_ui_zeroext: 893380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 894ec8e1c62SCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.wu fa5, a0 895380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 896380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 897380fd820SAlex Bradbury; 898380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_bf16_ui_zeroext: 899380fd820SAlex Bradbury; RV64ID: # %bb.0: 900380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, -16 901380fd820SAlex Bradbury; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 902380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.s.wu fa0, a0 903eabaee0cSFangrui Song; RV64ID-NEXT: call __truncsfbf2 904380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 905380fd820SAlex Bradbury; RV64ID-NEXT: lui a1, 1048560 906380fd820SAlex Bradbury; RV64ID-NEXT: or a0, a0, a1 907380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa0, a0 908380fd820SAlex Bradbury; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 909380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, 16 910380fd820SAlex Bradbury; RV64ID-NEXT: ret 9117a1b2adcSAlex Bradbury %1 = uitofp i16 %a to bfloat 9127a1b2adcSAlex Bradbury ret bfloat %1 9137a1b2adcSAlex Bradbury} 9147a1b2adcSAlex Bradbury 9157a1b2adcSAlex Bradburydefine bfloat @fcvt_bf16_w(i32 %a) nounwind { 916380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_bf16_w: 917380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 918380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.w fa5, a0 919380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 920380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 9217a1b2adcSAlex Bradbury; 922380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_bf16_w: 923380fd820SAlex Bradbury; RV32ID: # %bb.0: 924380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, -16 925380fd820SAlex Bradbury; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 926380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.s.w fa0, a0 927eabaee0cSFangrui Song; RV32ID-NEXT: call __truncsfbf2 928380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 929380fd820SAlex Bradbury; RV32ID-NEXT: lui a1, 1048560 930380fd820SAlex Bradbury; RV32ID-NEXT: or a0, a0, a1 931380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa0, a0 932380fd820SAlex Bradbury; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 933380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, 16 934380fd820SAlex Bradbury; RV32ID-NEXT: ret 935380fd820SAlex Bradbury; 936380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_bf16_w: 937380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 938ec8e1c62SCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.w fa5, a0 939380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 940380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 941380fd820SAlex Bradbury; 942380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_bf16_w: 943380fd820SAlex Bradbury; RV64ID: # %bb.0: 944380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, -16 945380fd820SAlex Bradbury; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 946380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.s.w fa0, a0 947eabaee0cSFangrui Song; RV64ID-NEXT: call __truncsfbf2 948380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 949380fd820SAlex Bradbury; RV64ID-NEXT: lui a1, 1048560 950380fd820SAlex Bradbury; RV64ID-NEXT: or a0, a0, a1 951380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa0, a0 952380fd820SAlex Bradbury; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 953380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, 16 954380fd820SAlex Bradbury; RV64ID-NEXT: ret 9557a1b2adcSAlex Bradbury %1 = sitofp i32 %a to bfloat 9567a1b2adcSAlex Bradbury ret bfloat %1 9577a1b2adcSAlex Bradbury} 9587a1b2adcSAlex Bradbury 9597a1b2adcSAlex Bradburydefine bfloat @fcvt_bf16_w_load(ptr %p) nounwind { 960380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_bf16_w_load: 961380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 962380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: lw a0, 0(a0) 963380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.w fa5, a0 964380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 965380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 9667a1b2adcSAlex Bradbury; 967380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_bf16_w_load: 968380fd820SAlex Bradbury; RV32ID: # %bb.0: 969380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, -16 970380fd820SAlex Bradbury; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 971380fd820SAlex Bradbury; RV32ID-NEXT: lw a0, 0(a0) 972380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.s.w fa0, a0 973eabaee0cSFangrui Song; RV32ID-NEXT: call __truncsfbf2 974380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 975380fd820SAlex Bradbury; RV32ID-NEXT: lui a1, 1048560 976380fd820SAlex Bradbury; RV32ID-NEXT: or a0, a0, a1 977380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa0, a0 978380fd820SAlex Bradbury; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 979380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, 16 980380fd820SAlex Bradbury; RV32ID-NEXT: ret 981380fd820SAlex Bradbury; 982380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_bf16_w_load: 983380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 984380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: lw a0, 0(a0) 985ec8e1c62SCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.w fa5, a0 986380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 987380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 988380fd820SAlex Bradbury; 989380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_bf16_w_load: 990380fd820SAlex Bradbury; RV64ID: # %bb.0: 991380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, -16 992380fd820SAlex Bradbury; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 993380fd820SAlex Bradbury; RV64ID-NEXT: lw a0, 0(a0) 994380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.s.w fa0, a0 995eabaee0cSFangrui Song; RV64ID-NEXT: call __truncsfbf2 996380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 997380fd820SAlex Bradbury; RV64ID-NEXT: lui a1, 1048560 998380fd820SAlex Bradbury; RV64ID-NEXT: or a0, a0, a1 999380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa0, a0 1000380fd820SAlex Bradbury; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1001380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, 16 1002380fd820SAlex Bradbury; RV64ID-NEXT: ret 10037a1b2adcSAlex Bradbury %a = load i32, ptr %p 10047a1b2adcSAlex Bradbury %1 = sitofp i32 %a to bfloat 10057a1b2adcSAlex Bradbury ret bfloat %1 10067a1b2adcSAlex Bradbury} 10077a1b2adcSAlex Bradbury 10087a1b2adcSAlex Bradburydefine bfloat @fcvt_bf16_wu(i32 %a) nounwind { 1009380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_bf16_wu: 1010380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 1011380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.wu fa5, a0 1012380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 1013380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 10147a1b2adcSAlex Bradbury; 1015380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_bf16_wu: 1016380fd820SAlex Bradbury; RV32ID: # %bb.0: 1017380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, -16 1018380fd820SAlex Bradbury; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1019380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.s.wu fa0, a0 1020eabaee0cSFangrui Song; RV32ID-NEXT: call __truncsfbf2 1021380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 1022380fd820SAlex Bradbury; RV32ID-NEXT: lui a1, 1048560 1023380fd820SAlex Bradbury; RV32ID-NEXT: or a0, a0, a1 1024380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa0, a0 1025380fd820SAlex Bradbury; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1026380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, 16 1027380fd820SAlex Bradbury; RV32ID-NEXT: ret 1028380fd820SAlex Bradbury; 1029380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_bf16_wu: 1030380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 1031ec8e1c62SCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.wu fa5, a0 1032380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 1033380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 1034380fd820SAlex Bradbury; 1035380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_bf16_wu: 1036380fd820SAlex Bradbury; RV64ID: # %bb.0: 1037380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, -16 1038380fd820SAlex Bradbury; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1039380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.s.wu fa0, a0 1040eabaee0cSFangrui Song; RV64ID-NEXT: call __truncsfbf2 1041380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 1042380fd820SAlex Bradbury; RV64ID-NEXT: lui a1, 1048560 1043380fd820SAlex Bradbury; RV64ID-NEXT: or a0, a0, a1 1044380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa0, a0 1045380fd820SAlex Bradbury; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1046380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, 16 1047380fd820SAlex Bradbury; RV64ID-NEXT: ret 10487a1b2adcSAlex Bradbury %1 = uitofp i32 %a to bfloat 10497a1b2adcSAlex Bradbury ret bfloat %1 10507a1b2adcSAlex Bradbury} 10517a1b2adcSAlex Bradbury 10527a1b2adcSAlex Bradburydefine bfloat @fcvt_bf16_wu_load(ptr %p) nounwind { 1053380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_bf16_wu_load: 1054380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 1055380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: lw a0, 0(a0) 1056380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.wu fa5, a0 1057380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 1058380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 10597a1b2adcSAlex Bradbury; 1060380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_bf16_wu_load: 1061380fd820SAlex Bradbury; RV32ID: # %bb.0: 1062380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, -16 1063380fd820SAlex Bradbury; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1064380fd820SAlex Bradbury; RV32ID-NEXT: lw a0, 0(a0) 1065380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.s.wu fa0, a0 1066eabaee0cSFangrui Song; RV32ID-NEXT: call __truncsfbf2 1067380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 1068380fd820SAlex Bradbury; RV32ID-NEXT: lui a1, 1048560 1069380fd820SAlex Bradbury; RV32ID-NEXT: or a0, a0, a1 1070380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa0, a0 1071380fd820SAlex Bradbury; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1072380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, 16 1073380fd820SAlex Bradbury; RV32ID-NEXT: ret 1074380fd820SAlex Bradbury; 1075380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_bf16_wu_load: 1076380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 1077380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: lwu a0, 0(a0) 1078ec8e1c62SCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.wu fa5, a0 1079380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 1080380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 1081380fd820SAlex Bradbury; 1082380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_bf16_wu_load: 1083380fd820SAlex Bradbury; RV64ID: # %bb.0: 1084380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, -16 1085380fd820SAlex Bradbury; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1086380fd820SAlex Bradbury; RV64ID-NEXT: lwu a0, 0(a0) 1087380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.s.wu fa0, a0 1088eabaee0cSFangrui Song; RV64ID-NEXT: call __truncsfbf2 1089380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 1090380fd820SAlex Bradbury; RV64ID-NEXT: lui a1, 1048560 1091380fd820SAlex Bradbury; RV64ID-NEXT: or a0, a0, a1 1092380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa0, a0 1093380fd820SAlex Bradbury; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1094380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, 16 1095380fd820SAlex Bradbury; RV64ID-NEXT: ret 10967a1b2adcSAlex Bradbury %a = load i32, ptr %p 10977a1b2adcSAlex Bradbury %1 = uitofp i32 %a to bfloat 10987a1b2adcSAlex Bradbury ret bfloat %1 10997a1b2adcSAlex Bradbury} 11007a1b2adcSAlex Bradbury 1101380fd820SAlex Bradbury; TODO: The following tests error on rv32 with zfbfmin enabled. 11027a1b2adcSAlex Bradbury 11037a1b2adcSAlex Bradbury; define bfloat @fcvt_bf16_l(i64 %a) nounwind { 11047a1b2adcSAlex Bradbury; %1 = sitofp i64 %a to bfloat 11057a1b2adcSAlex Bradbury; ret bfloat %1 11067a1b2adcSAlex Bradbury; } 11077a1b2adcSAlex Bradbury 11087a1b2adcSAlex Bradbury; define bfloat @fcvt_bf16_lu(i64 %a) nounwind { 11097a1b2adcSAlex Bradbury; %1 = uitofp i64 %a to bfloat 11107a1b2adcSAlex Bradbury; ret bfloat %1 11117a1b2adcSAlex Bradbury; } 11127a1b2adcSAlex Bradbury 11137a1b2adcSAlex Bradburydefine bfloat @fcvt_bf16_s(float %a) nounwind { 1114380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_bf16_s: 1115380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 1116380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa0 1117380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 11187a1b2adcSAlex Bradbury; 1119380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_bf16_s: 1120380fd820SAlex Bradbury; RV32ID: # %bb.0: 1121380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, -16 1122380fd820SAlex Bradbury; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1123eabaee0cSFangrui Song; RV32ID-NEXT: call __truncsfbf2 1124380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 1125380fd820SAlex Bradbury; RV32ID-NEXT: lui a1, 1048560 1126380fd820SAlex Bradbury; RV32ID-NEXT: or a0, a0, a1 1127380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa0, a0 1128380fd820SAlex Bradbury; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1129380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, 16 1130380fd820SAlex Bradbury; RV32ID-NEXT: ret 1131380fd820SAlex Bradbury; 1132380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_bf16_s: 1133380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 1134380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa0 1135380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 1136380fd820SAlex Bradbury; 1137380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_bf16_s: 1138380fd820SAlex Bradbury; RV64ID: # %bb.0: 1139380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, -16 1140380fd820SAlex Bradbury; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1141eabaee0cSFangrui Song; RV64ID-NEXT: call __truncsfbf2 1142380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 1143380fd820SAlex Bradbury; RV64ID-NEXT: lui a1, 1048560 1144380fd820SAlex Bradbury; RV64ID-NEXT: or a0, a0, a1 1145380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa0, a0 1146380fd820SAlex Bradbury; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1147380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, 16 1148380fd820SAlex Bradbury; RV64ID-NEXT: ret 11497a1b2adcSAlex Bradbury %1 = fptrunc float %a to bfloat 11507a1b2adcSAlex Bradbury ret bfloat %1 11517a1b2adcSAlex Bradbury} 11527a1b2adcSAlex Bradbury 11537a1b2adcSAlex Bradburydefine float @fcvt_s_bf16(bfloat %a) nounwind { 1154380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_s_bf16: 1155380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 1156380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa0, fa0 1157380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 11587a1b2adcSAlex Bradbury; 1159380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_s_bf16: 1160380fd820SAlex Bradbury; RV32ID: # %bb.0: 1161380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 1162380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 1163380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa0, a0 1164380fd820SAlex Bradbury; RV32ID-NEXT: ret 1165380fd820SAlex Bradbury; 1166380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_s_bf16: 1167380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 1168380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa0, fa0 1169380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 1170380fd820SAlex Bradbury; 1171380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_s_bf16: 1172380fd820SAlex Bradbury; RV64ID: # %bb.0: 1173380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 1174380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 1175380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa0, a0 1176380fd820SAlex Bradbury; RV64ID-NEXT: ret 11777a1b2adcSAlex Bradbury %1 = fpext bfloat %a to float 11787a1b2adcSAlex Bradbury ret float %1 11797a1b2adcSAlex Bradbury} 11807a1b2adcSAlex Bradbury 11817a1b2adcSAlex Bradburydefine bfloat @fcvt_bf16_d(double %a) nounwind { 11827a1b2adcSAlex Bradbury; RV32IZFBFMIN-LABEL: fcvt_bf16_d: 11837a1b2adcSAlex Bradbury; RV32IZFBFMIN: # %bb.0: 11847a1b2adcSAlex Bradbury; RV32IZFBFMIN-NEXT: addi sp, sp, -16 11857a1b2adcSAlex Bradbury; RV32IZFBFMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1186eabaee0cSFangrui Song; RV32IZFBFMIN-NEXT: call __truncdfbf2 11877a1b2adcSAlex Bradbury; RV32IZFBFMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 11887a1b2adcSAlex Bradbury; RV32IZFBFMIN-NEXT: addi sp, sp, 16 11897a1b2adcSAlex Bradbury; RV32IZFBFMIN-NEXT: ret 11907a1b2adcSAlex Bradbury; 11917a1b2adcSAlex Bradbury; R32IDZFBFMIN-LABEL: fcvt_bf16_d: 11927a1b2adcSAlex Bradbury; R32IDZFBFMIN: # %bb.0: 11937a1b2adcSAlex Bradbury; R32IDZFBFMIN-NEXT: fcvt.s.d fa5, fa0 11947a1b2adcSAlex Bradbury; R32IDZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 11957a1b2adcSAlex Bradbury; R32IDZFBFMIN-NEXT: ret 11967a1b2adcSAlex Bradbury; 1197380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_bf16_d: 1198380fd820SAlex Bradbury; RV32ID: # %bb.0: 1199380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, -16 1200380fd820SAlex Bradbury; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1201eabaee0cSFangrui Song; RV32ID-NEXT: call __truncdfbf2 1202380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 1203380fd820SAlex Bradbury; RV32ID-NEXT: lui a1, 1048560 1204380fd820SAlex Bradbury; RV32ID-NEXT: or a0, a0, a1 1205380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa0, a0 1206380fd820SAlex Bradbury; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1207380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, 16 1208380fd820SAlex Bradbury; RV32ID-NEXT: ret 1209380fd820SAlex Bradbury; 12107a1b2adcSAlex Bradbury; RV64IZFBFMIN-LABEL: fcvt_bf16_d: 12117a1b2adcSAlex Bradbury; RV64IZFBFMIN: # %bb.0: 12127a1b2adcSAlex Bradbury; RV64IZFBFMIN-NEXT: addi sp, sp, -16 12137a1b2adcSAlex Bradbury; RV64IZFBFMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1214eabaee0cSFangrui Song; RV64IZFBFMIN-NEXT: call __truncdfbf2 12157a1b2adcSAlex Bradbury; RV64IZFBFMIN-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 12167a1b2adcSAlex Bradbury; RV64IZFBFMIN-NEXT: addi sp, sp, 16 12177a1b2adcSAlex Bradbury; RV64IZFBFMIN-NEXT: ret 12187a1b2adcSAlex Bradbury; 12197a1b2adcSAlex Bradbury; RV64IDZFBFMIN-LABEL: fcvt_bf16_d: 12207a1b2adcSAlex Bradbury; RV64IDZFBFMIN: # %bb.0: 1221380fd820SAlex Bradbury; RV64IDZFBFMIN-NEXT: fcvt.s.d fa5, fa0 12227a1b2adcSAlex Bradbury; RV64IDZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5 12237a1b2adcSAlex Bradbury; RV64IDZFBFMIN-NEXT: ret 1224380fd820SAlex Bradbury; 1225380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_bf16_d: 1226380fd820SAlex Bradbury; RV64ID: # %bb.0: 1227380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, -16 1228380fd820SAlex Bradbury; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1229eabaee0cSFangrui Song; RV64ID-NEXT: call __truncdfbf2 1230380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 1231380fd820SAlex Bradbury; RV64ID-NEXT: lui a1, 1048560 1232380fd820SAlex Bradbury; RV64ID-NEXT: or a0, a0, a1 1233380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa0, a0 1234380fd820SAlex Bradbury; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1235380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, 16 1236380fd820SAlex Bradbury; RV64ID-NEXT: ret 12377a1b2adcSAlex Bradbury %1 = fptrunc double %a to bfloat 12387a1b2adcSAlex Bradbury ret bfloat %1 12397a1b2adcSAlex Bradbury} 12407a1b2adcSAlex Bradbury 12417a1b2adcSAlex Bradburydefine double @fcvt_d_bf16(bfloat %a) nounwind { 12427a1b2adcSAlex Bradbury; RV32IZFBFMIN-LABEL: fcvt_d_bf16: 12437a1b2adcSAlex Bradbury; RV32IZFBFMIN: # %bb.0: 12447a1b2adcSAlex Bradbury; RV32IZFBFMIN-NEXT: addi sp, sp, -16 12457a1b2adcSAlex Bradbury; RV32IZFBFMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 12467a1b2adcSAlex Bradbury; RV32IZFBFMIN-NEXT: fcvt.s.bf16 fa0, fa0 1247eabaee0cSFangrui Song; RV32IZFBFMIN-NEXT: call __extendsfdf2 12487a1b2adcSAlex Bradbury; RV32IZFBFMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 12497a1b2adcSAlex Bradbury; RV32IZFBFMIN-NEXT: addi sp, sp, 16 12507a1b2adcSAlex Bradbury; RV32IZFBFMIN-NEXT: ret 12517a1b2adcSAlex Bradbury; 12527a1b2adcSAlex Bradbury; R32IDZFBFMIN-LABEL: fcvt_d_bf16: 12537a1b2adcSAlex Bradbury; R32IDZFBFMIN: # %bb.0: 1254*9122c523SPengcheng Wang; R32IDZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0, dyn 12557a1b2adcSAlex Bradbury; R32IDZFBFMIN-NEXT: fcvt.d.s fa0, fa5 12567a1b2adcSAlex Bradbury; R32IDZFBFMIN-NEXT: ret 12577a1b2adcSAlex Bradbury; 1258380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_d_bf16: 1259380fd820SAlex Bradbury; RV32ID: # %bb.0: 1260380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 1261380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 1262380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa5, a0 1263380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.d.s fa0, fa5 1264380fd820SAlex Bradbury; RV32ID-NEXT: ret 1265380fd820SAlex Bradbury; 12667a1b2adcSAlex Bradbury; RV64IZFBFMIN-LABEL: fcvt_d_bf16: 12677a1b2adcSAlex Bradbury; RV64IZFBFMIN: # %bb.0: 12687a1b2adcSAlex Bradbury; RV64IZFBFMIN-NEXT: addi sp, sp, -16 12697a1b2adcSAlex Bradbury; RV64IZFBFMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 12707a1b2adcSAlex Bradbury; RV64IZFBFMIN-NEXT: fcvt.s.bf16 fa0, fa0 1271eabaee0cSFangrui Song; RV64IZFBFMIN-NEXT: call __extendsfdf2 12727a1b2adcSAlex Bradbury; RV64IZFBFMIN-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 12737a1b2adcSAlex Bradbury; RV64IZFBFMIN-NEXT: addi sp, sp, 16 12747a1b2adcSAlex Bradbury; RV64IZFBFMIN-NEXT: ret 12757a1b2adcSAlex Bradbury; 12767a1b2adcSAlex Bradbury; RV64IDZFBFMIN-LABEL: fcvt_d_bf16: 12777a1b2adcSAlex Bradbury; RV64IDZFBFMIN: # %bb.0: 1278*9122c523SPengcheng Wang; RV64IDZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0, dyn 1279380fd820SAlex Bradbury; RV64IDZFBFMIN-NEXT: fcvt.d.s fa0, fa5 12807a1b2adcSAlex Bradbury; RV64IDZFBFMIN-NEXT: ret 1281380fd820SAlex Bradbury; 1282380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_d_bf16: 1283380fd820SAlex Bradbury; RV64ID: # %bb.0: 1284380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 1285380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 1286380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 1287380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.d.s fa0, fa5 1288380fd820SAlex Bradbury; RV64ID-NEXT: ret 12897a1b2adcSAlex Bradbury %1 = fpext bfloat %a to double 12907a1b2adcSAlex Bradbury ret double %1 12917a1b2adcSAlex Bradbury} 12927a1b2adcSAlex Bradbury 12937a1b2adcSAlex Bradburydefine bfloat @bitcast_bf16_i16(i16 %a) nounwind { 1294380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: bitcast_bf16_i16: 1295380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 1296380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fmv.h.x fa0, a0 1297380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 12987a1b2adcSAlex Bradbury; 1299380fd820SAlex Bradbury; RV32ID-LABEL: bitcast_bf16_i16: 1300380fd820SAlex Bradbury; RV32ID: # %bb.0: 1301380fd820SAlex Bradbury; RV32ID-NEXT: lui a1, 1048560 1302380fd820SAlex Bradbury; RV32ID-NEXT: or a0, a0, a1 1303380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa0, a0 1304380fd820SAlex Bradbury; RV32ID-NEXT: ret 1305380fd820SAlex Bradbury; 1306380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: bitcast_bf16_i16: 1307380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 1308380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fmv.h.x fa0, a0 1309380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 1310380fd820SAlex Bradbury; 1311380fd820SAlex Bradbury; RV64ID-LABEL: bitcast_bf16_i16: 1312380fd820SAlex Bradbury; RV64ID: # %bb.0: 1313380fd820SAlex Bradbury; RV64ID-NEXT: lui a1, 1048560 1314380fd820SAlex Bradbury; RV64ID-NEXT: or a0, a0, a1 1315380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa0, a0 1316380fd820SAlex Bradbury; RV64ID-NEXT: ret 13177a1b2adcSAlex Bradbury %1 = bitcast i16 %a to bfloat 13187a1b2adcSAlex Bradbury ret bfloat %1 13197a1b2adcSAlex Bradbury} 13207a1b2adcSAlex Bradbury 13217a1b2adcSAlex Bradburydefine i16 @bitcast_i16_bf16(bfloat %a) nounwind { 1322380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: bitcast_i16_bf16: 1323380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 1324380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fmv.x.h a0, fa0 1325380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 13267a1b2adcSAlex Bradbury; 1327380fd820SAlex Bradbury; RV32ID-LABEL: bitcast_i16_bf16: 1328380fd820SAlex Bradbury; RV32ID: # %bb.0: 1329380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 1330380fd820SAlex Bradbury; RV32ID-NEXT: ret 1331380fd820SAlex Bradbury; 1332380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: bitcast_i16_bf16: 1333380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 1334380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fmv.x.h a0, fa0 1335380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 1336380fd820SAlex Bradbury; 1337380fd820SAlex Bradbury; RV64ID-LABEL: bitcast_i16_bf16: 1338380fd820SAlex Bradbury; RV64ID: # %bb.0: 1339380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 1340380fd820SAlex Bradbury; RV64ID-NEXT: ret 13417a1b2adcSAlex Bradbury %1 = bitcast bfloat %a to i16 13427a1b2adcSAlex Bradbury ret i16 %1 13437a1b2adcSAlex Bradbury} 13447a1b2adcSAlex Bradbury 13457a1b2adcSAlex Bradburydefine signext i32 @fcvt_bf16_w_demanded_bits(i32 signext %0, ptr %1) nounwind { 1346380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_bf16_w_demanded_bits: 1347380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 1348380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: addi a0, a0, 1 1349380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.w fa5, a0 1350380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.bf16.s fa5, fa5 1351380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fsh fa5, 0(a1) 1352380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 13537a1b2adcSAlex Bradbury; 1354380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_bf16_w_demanded_bits: 1355380fd820SAlex Bradbury; RV32ID: # %bb.0: 1356380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, -16 1357380fd820SAlex Bradbury; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1358380fd820SAlex Bradbury; RV32ID-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 1359380fd820SAlex Bradbury; RV32ID-NEXT: sw s1, 4(sp) # 4-byte Folded Spill 1360380fd820SAlex Bradbury; RV32ID-NEXT: mv s0, a1 1361380fd820SAlex Bradbury; RV32ID-NEXT: addi s1, a0, 1 1362380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.s.w fa0, s1 1363eabaee0cSFangrui Song; RV32ID-NEXT: call __truncsfbf2 1364380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 1365380fd820SAlex Bradbury; RV32ID-NEXT: sh a0, 0(s0) 1366380fd820SAlex Bradbury; RV32ID-NEXT: mv a0, s1 1367380fd820SAlex Bradbury; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1368380fd820SAlex Bradbury; RV32ID-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 1369380fd820SAlex Bradbury; RV32ID-NEXT: lw s1, 4(sp) # 4-byte Folded Reload 1370380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, 16 1371380fd820SAlex Bradbury; RV32ID-NEXT: ret 1372380fd820SAlex Bradbury; 1373380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_bf16_w_demanded_bits: 1374380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 1375380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: addiw a0, a0, 1 1376ec8e1c62SCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.w fa5, a0 1377380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.bf16.s fa5, fa5 1378380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fsh fa5, 0(a1) 1379380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 1380380fd820SAlex Bradbury; 1381380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_bf16_w_demanded_bits: 1382380fd820SAlex Bradbury; RV64ID: # %bb.0: 1383380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, -32 1384380fd820SAlex Bradbury; RV64ID-NEXT: sd ra, 24(sp) # 8-byte Folded Spill 1385380fd820SAlex Bradbury; RV64ID-NEXT: sd s0, 16(sp) # 8-byte Folded Spill 1386380fd820SAlex Bradbury; RV64ID-NEXT: sd s1, 8(sp) # 8-byte Folded Spill 1387380fd820SAlex Bradbury; RV64ID-NEXT: mv s0, a1 1388380fd820SAlex Bradbury; RV64ID-NEXT: addiw s1, a0, 1 1389380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.s.w fa0, s1 1390eabaee0cSFangrui Song; RV64ID-NEXT: call __truncsfbf2 1391380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 1392380fd820SAlex Bradbury; RV64ID-NEXT: sh a0, 0(s0) 1393380fd820SAlex Bradbury; RV64ID-NEXT: mv a0, s1 1394380fd820SAlex Bradbury; RV64ID-NEXT: ld ra, 24(sp) # 8-byte Folded Reload 1395380fd820SAlex Bradbury; RV64ID-NEXT: ld s0, 16(sp) # 8-byte Folded Reload 1396380fd820SAlex Bradbury; RV64ID-NEXT: ld s1, 8(sp) # 8-byte Folded Reload 1397380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, 32 1398380fd820SAlex Bradbury; RV64ID-NEXT: ret 13997a1b2adcSAlex Bradbury %3 = add i32 %0, 1 14007a1b2adcSAlex Bradbury %4 = sitofp i32 %3 to bfloat 14017a1b2adcSAlex Bradbury store bfloat %4, ptr %1, align 2 14027a1b2adcSAlex Bradbury ret i32 %3 14037a1b2adcSAlex Bradbury} 14047a1b2adcSAlex Bradbury 14057a1b2adcSAlex Bradburydefine signext i32 @fcvt_bf16_wu_demanded_bits(i32 signext %0, ptr %1) nounwind { 1406380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_bf16_wu_demanded_bits: 1407380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 1408380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: addi a0, a0, 1 1409380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.wu fa5, a0 1410380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.bf16.s fa5, fa5 1411380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fsh fa5, 0(a1) 1412380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 14137a1b2adcSAlex Bradbury; 1414380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_bf16_wu_demanded_bits: 1415380fd820SAlex Bradbury; RV32ID: # %bb.0: 1416380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, -16 1417380fd820SAlex Bradbury; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1418380fd820SAlex Bradbury; RV32ID-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 1419380fd820SAlex Bradbury; RV32ID-NEXT: sw s1, 4(sp) # 4-byte Folded Spill 1420380fd820SAlex Bradbury; RV32ID-NEXT: mv s0, a1 1421380fd820SAlex Bradbury; RV32ID-NEXT: addi s1, a0, 1 1422380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.s.wu fa0, s1 1423eabaee0cSFangrui Song; RV32ID-NEXT: call __truncsfbf2 1424380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 1425380fd820SAlex Bradbury; RV32ID-NEXT: sh a0, 0(s0) 1426380fd820SAlex Bradbury; RV32ID-NEXT: mv a0, s1 1427380fd820SAlex Bradbury; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1428380fd820SAlex Bradbury; RV32ID-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 1429380fd820SAlex Bradbury; RV32ID-NEXT: lw s1, 4(sp) # 4-byte Folded Reload 1430380fd820SAlex Bradbury; RV32ID-NEXT: addi sp, sp, 16 1431380fd820SAlex Bradbury; RV32ID-NEXT: ret 1432380fd820SAlex Bradbury; 1433380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_bf16_wu_demanded_bits: 1434380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 1435380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: addiw a0, a0, 1 1436ec8e1c62SCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.wu fa5, a0 1437380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.bf16.s fa5, fa5 1438380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fsh fa5, 0(a1) 1439380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 1440380fd820SAlex Bradbury; 1441380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_bf16_wu_demanded_bits: 1442380fd820SAlex Bradbury; RV64ID: # %bb.0: 1443380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, -32 1444380fd820SAlex Bradbury; RV64ID-NEXT: sd ra, 24(sp) # 8-byte Folded Spill 1445380fd820SAlex Bradbury; RV64ID-NEXT: sd s0, 16(sp) # 8-byte Folded Spill 1446380fd820SAlex Bradbury; RV64ID-NEXT: sd s1, 8(sp) # 8-byte Folded Spill 1447380fd820SAlex Bradbury; RV64ID-NEXT: mv s0, a1 1448380fd820SAlex Bradbury; RV64ID-NEXT: addiw s1, a0, 1 1449380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.s.wu fa0, s1 1450eabaee0cSFangrui Song; RV64ID-NEXT: call __truncsfbf2 1451380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 1452380fd820SAlex Bradbury; RV64ID-NEXT: sh a0, 0(s0) 1453380fd820SAlex Bradbury; RV64ID-NEXT: mv a0, s1 1454380fd820SAlex Bradbury; RV64ID-NEXT: ld ra, 24(sp) # 8-byte Folded Reload 1455380fd820SAlex Bradbury; RV64ID-NEXT: ld s0, 16(sp) # 8-byte Folded Reload 1456380fd820SAlex Bradbury; RV64ID-NEXT: ld s1, 8(sp) # 8-byte Folded Reload 1457380fd820SAlex Bradbury; RV64ID-NEXT: addi sp, sp, 32 1458380fd820SAlex Bradbury; RV64ID-NEXT: ret 14597a1b2adcSAlex Bradbury %3 = add i32 %0, 1 14607a1b2adcSAlex Bradbury %4 = uitofp i32 %3 to bfloat 14617a1b2adcSAlex Bradbury store bfloat %4, ptr %1, align 2 14627a1b2adcSAlex Bradbury ret i32 %3 14637a1b2adcSAlex Bradbury} 14647a1b2adcSAlex Bradbury 14657a1b2adcSAlex Bradburydefine signext i8 @fcvt_w_s_i8(bfloat %a) nounwind { 1466380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_w_s_i8: 1467380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 14682a9f93bfSCraig Topper; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 1469380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.w.s a0, fa5, rtz 1470380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 14717a1b2adcSAlex Bradbury; 1472380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_w_s_i8: 1473380fd820SAlex Bradbury; RV32ID: # %bb.0: 1474380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 1475380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 1476380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa5, a0 1477380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.w.s a0, fa5, rtz 1478380fd820SAlex Bradbury; RV32ID-NEXT: ret 1479380fd820SAlex Bradbury; 1480380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_w_s_i8: 1481380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 14822a9f93bfSCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 1483380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.l.s a0, fa5, rtz 1484380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 1485380fd820SAlex Bradbury; 1486380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_w_s_i8: 1487380fd820SAlex Bradbury; RV64ID: # %bb.0: 1488380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 1489380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 1490380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 1491380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.l.s a0, fa5, rtz 1492380fd820SAlex Bradbury; RV64ID-NEXT: ret 14937a1b2adcSAlex Bradbury %1 = fptosi bfloat %a to i8 14947a1b2adcSAlex Bradbury ret i8 %1 14957a1b2adcSAlex Bradbury} 14967a1b2adcSAlex Bradbury 14977a1b2adcSAlex Bradburydefine signext i8 @fcvt_w_s_sat_i8(bfloat %a) nounwind { 1498380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_w_s_sat_i8: 1499380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: # %start 1500380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 1501*9122c523SPengcheng Wang; CHECK32ZFBFMIN-NEXT: lui a0, 798720 1502*9122c523SPengcheng Wang; CHECK32ZFBFMIN-NEXT: lui a1, 274400 1503*9122c523SPengcheng Wang; CHECK32ZFBFMIN-NEXT: fmv.w.x fa4, a0 1504380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: feq.s a0, fa5, fa5 1505380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: neg a0, a0 1506380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fmax.s fa5, fa5, fa4 1507380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fmv.w.x fa4, a1 1508380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fmin.s fa5, fa5, fa4 1509380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.w.s a1, fa5, rtz 1510380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: and a0, a0, a1 1511380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 15127a1b2adcSAlex Bradbury; 1513380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_w_s_sat_i8: 1514380fd820SAlex Bradbury; RV32ID: # %bb.0: # %start 1515380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 1516380fd820SAlex Bradbury; RV32ID-NEXT: lui a1, 798720 1517*9122c523SPengcheng Wang; RV32ID-NEXT: fmv.w.x fa5, a1 1518380fd820SAlex Bradbury; RV32ID-NEXT: lui a1, 274400 1519*9122c523SPengcheng Wang; RV32ID-NEXT: slli a0, a0, 16 1520*9122c523SPengcheng Wang; RV32ID-NEXT: fmv.w.x fa4, a0 1521*9122c523SPengcheng Wang; RV32ID-NEXT: feq.s a0, fa4, fa4 1522*9122c523SPengcheng Wang; RV32ID-NEXT: fmax.s fa5, fa4, fa5 1523380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa4, a1 1524*9122c523SPengcheng Wang; RV32ID-NEXT: neg a0, a0 1525380fd820SAlex Bradbury; RV32ID-NEXT: fmin.s fa5, fa5, fa4 1526380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.w.s a1, fa5, rtz 1527380fd820SAlex Bradbury; RV32ID-NEXT: and a0, a0, a1 1528380fd820SAlex Bradbury; RV32ID-NEXT: ret 1529380fd820SAlex Bradbury; 1530380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_w_s_sat_i8: 1531380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: # %start 1532380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 1533*9122c523SPengcheng Wang; CHECK64ZFBFMIN-NEXT: lui a0, 798720 1534*9122c523SPengcheng Wang; CHECK64ZFBFMIN-NEXT: lui a1, 274400 1535*9122c523SPengcheng Wang; CHECK64ZFBFMIN-NEXT: fmv.w.x fa4, a0 1536380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: feq.s a0, fa5, fa5 1537380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: neg a0, a0 1538380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fmax.s fa5, fa5, fa4 1539380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fmv.w.x fa4, a1 1540380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fmin.s fa5, fa5, fa4 1541380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.l.s a1, fa5, rtz 1542380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: and a0, a0, a1 1543380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 1544380fd820SAlex Bradbury; 1545380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_w_s_sat_i8: 1546380fd820SAlex Bradbury; RV64ID: # %bb.0: # %start 1547380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 1548380fd820SAlex Bradbury; RV64ID-NEXT: lui a1, 798720 1549*9122c523SPengcheng Wang; RV64ID-NEXT: fmv.w.x fa5, a1 1550380fd820SAlex Bradbury; RV64ID-NEXT: lui a1, 274400 1551*9122c523SPengcheng Wang; RV64ID-NEXT: slli a0, a0, 16 1552*9122c523SPengcheng Wang; RV64ID-NEXT: fmv.w.x fa4, a0 1553*9122c523SPengcheng Wang; RV64ID-NEXT: feq.s a0, fa4, fa4 1554*9122c523SPengcheng Wang; RV64ID-NEXT: fmax.s fa5, fa4, fa5 1555380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa4, a1 1556*9122c523SPengcheng Wang; RV64ID-NEXT: neg a0, a0 1557380fd820SAlex Bradbury; RV64ID-NEXT: fmin.s fa5, fa5, fa4 1558380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.l.s a1, fa5, rtz 1559380fd820SAlex Bradbury; RV64ID-NEXT: and a0, a0, a1 1560380fd820SAlex Bradbury; RV64ID-NEXT: ret 15617a1b2adcSAlex Bradburystart: 15627a1b2adcSAlex Bradbury %0 = tail call i8 @llvm.fptosi.sat.i8.bf16(bfloat %a) 15637a1b2adcSAlex Bradbury ret i8 %0 15647a1b2adcSAlex Bradbury} 15657a1b2adcSAlex Bradburydeclare i8 @llvm.fptosi.sat.i8.bf16(bfloat) 15667a1b2adcSAlex Bradbury 15677a1b2adcSAlex Bradburydefine zeroext i8 @fcvt_wu_s_i8(bfloat %a) nounwind { 1568380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_wu_s_i8: 1569380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: 15702a9f93bfSCraig Topper; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 1571db3792b8SCraig Topper; CHECK32ZFBFMIN-NEXT: fcvt.w.s a0, fa5, rtz 1572380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 15737a1b2adcSAlex Bradbury; 1574380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_wu_s_i8: 1575380fd820SAlex Bradbury; RV32ID: # %bb.0: 1576380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 1577380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 1578380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa5, a0 1579380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.wu.s a0, fa5, rtz 1580380fd820SAlex Bradbury; RV32ID-NEXT: ret 1581380fd820SAlex Bradbury; 1582380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_wu_s_i8: 1583380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: 15842a9f93bfSCraig Topper; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 1585380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.lu.s a0, fa5, rtz 1586380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 1587380fd820SAlex Bradbury; 1588380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_wu_s_i8: 1589380fd820SAlex Bradbury; RV64ID: # %bb.0: 1590380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 1591380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 1592380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 1593380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.lu.s a0, fa5, rtz 1594380fd820SAlex Bradbury; RV64ID-NEXT: ret 15957a1b2adcSAlex Bradbury %1 = fptoui bfloat %a to i8 15967a1b2adcSAlex Bradbury ret i8 %1 15977a1b2adcSAlex Bradbury} 15987a1b2adcSAlex Bradbury 15997a1b2adcSAlex Bradburydefine zeroext i8 @fcvt_wu_s_sat_i8(bfloat %a) nounwind { 1600380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_wu_s_sat_i8: 1601380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: # %start 1602380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 1603380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fmv.w.x fa4, zero 1604380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: lui a0, 276464 1605*9122c523SPengcheng Wang; CHECK32ZFBFMIN-NEXT: fmax.s fa5, fa5, fa4 1606380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fmv.w.x fa4, a0 1607380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fmin.s fa5, fa5, fa4 1608380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.wu.s a0, fa5, rtz 1609380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 16107a1b2adcSAlex Bradbury; 1611380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_wu_s_sat_i8: 1612380fd820SAlex Bradbury; RV32ID: # %bb.0: # %start 1613380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 1614*9122c523SPengcheng Wang; RV32ID-NEXT: fmv.w.x fa5, zero 1615380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 1616*9122c523SPengcheng Wang; RV32ID-NEXT: fmv.w.x fa4, a0 1617380fd820SAlex Bradbury; RV32ID-NEXT: lui a0, 276464 1618*9122c523SPengcheng Wang; RV32ID-NEXT: fmax.s fa5, fa4, fa5 1619380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa4, a0 1620380fd820SAlex Bradbury; RV32ID-NEXT: fmin.s fa5, fa5, fa4 1621380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.wu.s a0, fa5, rtz 1622380fd820SAlex Bradbury; RV32ID-NEXT: ret 1623380fd820SAlex Bradbury; 1624380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_wu_s_sat_i8: 1625380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: # %start 1626380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 1627380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fmv.w.x fa4, zero 1628380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: lui a0, 276464 1629*9122c523SPengcheng Wang; CHECK64ZFBFMIN-NEXT: fmax.s fa5, fa5, fa4 1630380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fmv.w.x fa4, a0 1631380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fmin.s fa5, fa5, fa4 1632380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.lu.s a0, fa5, rtz 1633380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 1634380fd820SAlex Bradbury; 1635380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_wu_s_sat_i8: 1636380fd820SAlex Bradbury; RV64ID: # %bb.0: # %start 1637380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 1638*9122c523SPengcheng Wang; RV64ID-NEXT: fmv.w.x fa5, zero 1639380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 1640*9122c523SPengcheng Wang; RV64ID-NEXT: fmv.w.x fa4, a0 1641380fd820SAlex Bradbury; RV64ID-NEXT: lui a0, 276464 1642*9122c523SPengcheng Wang; RV64ID-NEXT: fmax.s fa5, fa4, fa5 1643380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa4, a0 1644380fd820SAlex Bradbury; RV64ID-NEXT: fmin.s fa5, fa5, fa4 1645380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.lu.s a0, fa5, rtz 1646380fd820SAlex Bradbury; RV64ID-NEXT: ret 16477a1b2adcSAlex Bradburystart: 16487a1b2adcSAlex Bradbury %0 = tail call i8 @llvm.fptoui.sat.i8.bf16(bfloat %a) 16497a1b2adcSAlex Bradbury ret i8 %0 16507a1b2adcSAlex Bradbury} 16517a1b2adcSAlex Bradburydeclare i8 @llvm.fptoui.sat.i8.bf16(bfloat) 16527a1b2adcSAlex Bradbury 16537a1b2adcSAlex Bradburydefine zeroext i32 @fcvt_wu_bf16_sat_zext(bfloat %a) nounwind { 1654380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_wu_bf16_sat_zext: 1655380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: # %start 1656380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 1657380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.wu.s a0, fa5, rtz 1658380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: feq.s a1, fa5, fa5 1659380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: seqz a1, a1 1660380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: addi a1, a1, -1 1661380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: and a0, a1, a0 1662380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 16637a1b2adcSAlex Bradbury; 1664380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_wu_bf16_sat_zext: 1665380fd820SAlex Bradbury; RV32ID: # %bb.0: # %start 1666380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 1667380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 1668380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa5, a0 1669380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.wu.s a0, fa5, rtz 1670380fd820SAlex Bradbury; RV32ID-NEXT: feq.s a1, fa5, fa5 1671380fd820SAlex Bradbury; RV32ID-NEXT: seqz a1, a1 1672380fd820SAlex Bradbury; RV32ID-NEXT: addi a1, a1, -1 1673380fd820SAlex Bradbury; RV32ID-NEXT: and a0, a1, a0 1674380fd820SAlex Bradbury; RV32ID-NEXT: ret 1675380fd820SAlex Bradbury; 1676380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_wu_bf16_sat_zext: 1677380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: # %start 1678380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 1679380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.wu.s a0, fa5, rtz 1680380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: feq.s a1, fa5, fa5 1681380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: seqz a1, a1 168286240751SPhilip Reames; CHECK64ZFBFMIN-NEXT: addi a1, a1, -1 1683380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: and a0, a0, a1 1684380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: slli a0, a0, 32 1685380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: srli a0, a0, 32 1686380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 1687380fd820SAlex Bradbury; 1688380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_wu_bf16_sat_zext: 1689380fd820SAlex Bradbury; RV64ID: # %bb.0: # %start 1690380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 1691380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 1692380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 1693380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.wu.s a0, fa5, rtz 1694380fd820SAlex Bradbury; RV64ID-NEXT: feq.s a1, fa5, fa5 1695380fd820SAlex Bradbury; RV64ID-NEXT: seqz a1, a1 169686240751SPhilip Reames; RV64ID-NEXT: addi a1, a1, -1 1697380fd820SAlex Bradbury; RV64ID-NEXT: and a0, a0, a1 1698380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 32 1699380fd820SAlex Bradbury; RV64ID-NEXT: srli a0, a0, 32 1700380fd820SAlex Bradbury; RV64ID-NEXT: ret 17017a1b2adcSAlex Bradburystart: 17027a1b2adcSAlex Bradbury %0 = tail call i32 @llvm.fptoui.sat.i32.bf16(bfloat %a) 17037a1b2adcSAlex Bradbury ret i32 %0 17047a1b2adcSAlex Bradbury} 17057a1b2adcSAlex Bradbury 17067a1b2adcSAlex Bradburydefine signext i32 @fcvt_w_bf16_sat_sext(bfloat %a) nounwind { 1707380fd820SAlex Bradbury; CHECK32ZFBFMIN-LABEL: fcvt_w_bf16_sat_sext: 1708380fd820SAlex Bradbury; CHECK32ZFBFMIN: # %bb.0: # %start 1709380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 1710380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: fcvt.w.s a0, fa5, rtz 1711380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: feq.s a1, fa5, fa5 1712380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: seqz a1, a1 1713380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: addi a1, a1, -1 1714380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: and a0, a1, a0 1715380fd820SAlex Bradbury; CHECK32ZFBFMIN-NEXT: ret 17167a1b2adcSAlex Bradbury; 1717380fd820SAlex Bradbury; RV32ID-LABEL: fcvt_w_bf16_sat_sext: 1718380fd820SAlex Bradbury; RV32ID: # %bb.0: # %start 1719380fd820SAlex Bradbury; RV32ID-NEXT: fmv.x.w a0, fa0 1720380fd820SAlex Bradbury; RV32ID-NEXT: slli a0, a0, 16 1721380fd820SAlex Bradbury; RV32ID-NEXT: fmv.w.x fa5, a0 1722380fd820SAlex Bradbury; RV32ID-NEXT: fcvt.w.s a0, fa5, rtz 1723380fd820SAlex Bradbury; RV32ID-NEXT: feq.s a1, fa5, fa5 1724380fd820SAlex Bradbury; RV32ID-NEXT: seqz a1, a1 1725380fd820SAlex Bradbury; RV32ID-NEXT: addi a1, a1, -1 1726380fd820SAlex Bradbury; RV32ID-NEXT: and a0, a1, a0 1727380fd820SAlex Bradbury; RV32ID-NEXT: ret 1728380fd820SAlex Bradbury; 1729380fd820SAlex Bradbury; CHECK64ZFBFMIN-LABEL: fcvt_w_bf16_sat_sext: 1730380fd820SAlex Bradbury; CHECK64ZFBFMIN: # %bb.0: # %start 1731380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0 1732380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: fcvt.w.s a0, fa5, rtz 1733380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: feq.s a1, fa5, fa5 1734380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: seqz a1, a1 1735380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: addi a1, a1, -1 1736380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: and a0, a1, a0 1737380fd820SAlex Bradbury; CHECK64ZFBFMIN-NEXT: ret 1738380fd820SAlex Bradbury; 1739380fd820SAlex Bradbury; RV64ID-LABEL: fcvt_w_bf16_sat_sext: 1740380fd820SAlex Bradbury; RV64ID: # %bb.0: # %start 1741380fd820SAlex Bradbury; RV64ID-NEXT: fmv.x.w a0, fa0 1742380fd820SAlex Bradbury; RV64ID-NEXT: slli a0, a0, 16 1743380fd820SAlex Bradbury; RV64ID-NEXT: fmv.w.x fa5, a0 1744380fd820SAlex Bradbury; RV64ID-NEXT: fcvt.w.s a0, fa5, rtz 1745380fd820SAlex Bradbury; RV64ID-NEXT: feq.s a1, fa5, fa5 1746380fd820SAlex Bradbury; RV64ID-NEXT: seqz a1, a1 1747380fd820SAlex Bradbury; RV64ID-NEXT: addi a1, a1, -1 1748380fd820SAlex Bradbury; RV64ID-NEXT: and a0, a1, a0 1749380fd820SAlex Bradbury; RV64ID-NEXT: ret 17507a1b2adcSAlex Bradburystart: 17517a1b2adcSAlex Bradbury %0 = tail call i32 @llvm.fptosi.sat.i32.bf16(bfloat %a) 17527a1b2adcSAlex Bradbury ret i32 %0 17537a1b2adcSAlex Bradbury} 1754