17b50c183SMonk Chiang; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 27b50c183SMonk Chiang; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zfhmin \ 37b50c183SMonk Chiang; RUN: -verify-machineinstrs -target-abi ilp32f | \ 47b50c183SMonk Chiang; RUN: FileCheck -check-prefix=RV32IZFHMIN %s 57b50c183SMonk Chiang; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zfhmin \ 67b50c183SMonk Chiang; RUN: -verify-machineinstrs -target-abi lp64f | \ 77b50c183SMonk Chiang; RUN: FileCheck -check-prefix=RV64IZFHMIN %s 87b50c183SMonk Chiang; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+d \ 97b50c183SMonk Chiang; RUN: -mattr=+zfhmin -verify-machineinstrs -target-abi ilp32d | \ 107b50c183SMonk Chiang; RUN: FileCheck -check-prefix=RV32IDZFHMIN %s 117b50c183SMonk Chiang; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+d \ 127b50c183SMonk Chiang; RUN: -mattr=+zfhmin -verify-machineinstrs -target-abi lp64d | \ 137b50c183SMonk Chiang; RUN: FileCheck -check-prefix=RV64IDZFHMIN %s 14773b0aaaSQihan Cai; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zhinxmin \ 15773b0aaaSQihan Cai; RUN: -verify-machineinstrs -target-abi ilp32 | \ 16773b0aaaSQihan Cai; RUN: FileCheck -check-prefix=RV32IZHINXMIN %s 17773b0aaaSQihan Cai; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zhinxmin \ 18773b0aaaSQihan Cai; RUN: -verify-machineinstrs -target-abi lp64 | \ 19773b0aaaSQihan Cai; RUN: FileCheck -check-prefix=RV64IZHINXMIN %s 20773b0aaaSQihan Cai; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zdinx \ 21773b0aaaSQihan Cai; RUN: -mattr=+zhinxmin -verify-machineinstrs -target-abi ilp32 | \ 22773b0aaaSQihan Cai; RUN: FileCheck -check-prefix=RV32IZDINXZHINXMIN %s 23773b0aaaSQihan Cai; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zdinx \ 24773b0aaaSQihan Cai; RUN: -mattr=+zhinxmin -verify-machineinstrs -target-abi lp64 | \ 25773b0aaaSQihan Cai; RUN: FileCheck -check-prefix=RV64IZDINXZHINXMIN %s 267b50c183SMonk Chiang 277b50c183SMonk Chiang; These intrinsics require half to be a legal type. 287b50c183SMonk Chiang 297b50c183SMonk Chiangdeclare iXLen @llvm.lrint.iXLen.f16(half) 307b50c183SMonk Chiang 317b50c183SMonk Chiangdefine iXLen @lrint_f16(half %a) nounwind { 327b50c183SMonk Chiang; RV32IZFHMIN-LABEL: lrint_f16: 337b50c183SMonk Chiang; RV32IZFHMIN: # %bb.0: 347b0c4184SCraig Topper; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa0 357b0c4184SCraig Topper; RV32IZFHMIN-NEXT: fcvt.w.s a0, fa5 367b50c183SMonk Chiang; RV32IZFHMIN-NEXT: ret 377b50c183SMonk Chiang; 387b50c183SMonk Chiang; RV64IZFHMIN-LABEL: lrint_f16: 397b50c183SMonk Chiang; RV64IZFHMIN: # %bb.0: 407b0c4184SCraig Topper; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa0 417b0c4184SCraig Topper; RV64IZFHMIN-NEXT: fcvt.l.s a0, fa5 427b50c183SMonk Chiang; RV64IZFHMIN-NEXT: ret 437b50c183SMonk Chiang; 447b50c183SMonk Chiang; RV32IDZFHMIN-LABEL: lrint_f16: 457b50c183SMonk Chiang; RV32IDZFHMIN: # %bb.0: 467b0c4184SCraig Topper; RV32IDZFHMIN-NEXT: fcvt.s.h fa5, fa0 477b0c4184SCraig Topper; RV32IDZFHMIN-NEXT: fcvt.w.s a0, fa5 487b50c183SMonk Chiang; RV32IDZFHMIN-NEXT: ret 497b50c183SMonk Chiang; 507b50c183SMonk Chiang; RV64IDZFHMIN-LABEL: lrint_f16: 517b50c183SMonk Chiang; RV64IDZFHMIN: # %bb.0: 527b0c4184SCraig Topper; RV64IDZFHMIN-NEXT: fcvt.s.h fa5, fa0 537b0c4184SCraig Topper; RV64IDZFHMIN-NEXT: fcvt.l.s a0, fa5 547b50c183SMonk Chiang; RV64IDZFHMIN-NEXT: ret 55773b0aaaSQihan Cai; 56773b0aaaSQihan Cai; RV32IZHINXMIN-LABEL: lrint_f16: 57773b0aaaSQihan Cai; RV32IZHINXMIN: # %bb.0: 58773b0aaaSQihan Cai; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 59773b0aaaSQihan Cai; RV32IZHINXMIN-NEXT: fcvt.w.s a0, a0 60773b0aaaSQihan Cai; RV32IZHINXMIN-NEXT: ret 61773b0aaaSQihan Cai; 62773b0aaaSQihan Cai; RV64IZHINXMIN-LABEL: lrint_f16: 63773b0aaaSQihan Cai; RV64IZHINXMIN: # %bb.0: 64773b0aaaSQihan Cai; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 65773b0aaaSQihan Cai; RV64IZHINXMIN-NEXT: fcvt.l.s a0, a0 66773b0aaaSQihan Cai; RV64IZHINXMIN-NEXT: ret 67773b0aaaSQihan Cai; 68773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-LABEL: lrint_f16: 69773b0aaaSQihan Cai; RV32IZDINXZHINXMIN: # %bb.0: 70773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a0 71773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-NEXT: fcvt.w.s a0, a0 72773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-NEXT: ret 73773b0aaaSQihan Cai; 74773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-LABEL: lrint_f16: 75773b0aaaSQihan Cai; RV64IZDINXZHINXMIN: # %bb.0: 76773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a0 77773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-NEXT: fcvt.l.s a0, a0 78773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-NEXT: ret 797b50c183SMonk Chiang %1 = call iXLen @llvm.lrint.iXLen.f16(half %a) 807b50c183SMonk Chiang ret iXLen %1 817b50c183SMonk Chiang} 827b50c183SMonk Chiang 837b50c183SMonk Chiangdeclare iXLen @llvm.lround.iXLen.f16(half) 847b50c183SMonk Chiang 857b50c183SMonk Chiangdefine iXLen @lround_f16(half %a) nounwind { 867b50c183SMonk Chiang; RV32IZFHMIN-LABEL: lround_f16: 877b50c183SMonk Chiang; RV32IZFHMIN: # %bb.0: 887b0c4184SCraig Topper; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa0 897b0c4184SCraig Topper; RV32IZFHMIN-NEXT: fcvt.w.s a0, fa5, rmm 907b50c183SMonk Chiang; RV32IZFHMIN-NEXT: ret 917b50c183SMonk Chiang; 927b50c183SMonk Chiang; RV64IZFHMIN-LABEL: lround_f16: 937b50c183SMonk Chiang; RV64IZFHMIN: # %bb.0: 947b0c4184SCraig Topper; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa0 957b0c4184SCraig Topper; RV64IZFHMIN-NEXT: fcvt.l.s a0, fa5, rmm 967b50c183SMonk Chiang; RV64IZFHMIN-NEXT: ret 977b50c183SMonk Chiang; 987b50c183SMonk Chiang; RV32IDZFHMIN-LABEL: lround_f16: 997b50c183SMonk Chiang; RV32IDZFHMIN: # %bb.0: 1007b0c4184SCraig Topper; RV32IDZFHMIN-NEXT: fcvt.s.h fa5, fa0 1017b0c4184SCraig Topper; RV32IDZFHMIN-NEXT: fcvt.w.s a0, fa5, rmm 1027b50c183SMonk Chiang; RV32IDZFHMIN-NEXT: ret 1037b50c183SMonk Chiang; 1047b50c183SMonk Chiang; RV64IDZFHMIN-LABEL: lround_f16: 1057b50c183SMonk Chiang; RV64IDZFHMIN: # %bb.0: 1067b0c4184SCraig Topper; RV64IDZFHMIN-NEXT: fcvt.s.h fa5, fa0 1077b0c4184SCraig Topper; RV64IDZFHMIN-NEXT: fcvt.l.s a0, fa5, rmm 1087b50c183SMonk Chiang; RV64IDZFHMIN-NEXT: ret 109773b0aaaSQihan Cai; 110773b0aaaSQihan Cai; RV32IZHINXMIN-LABEL: lround_f16: 111773b0aaaSQihan Cai; RV32IZHINXMIN: # %bb.0: 112773b0aaaSQihan Cai; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 113773b0aaaSQihan Cai; RV32IZHINXMIN-NEXT: fcvt.w.s a0, a0, rmm 114773b0aaaSQihan Cai; RV32IZHINXMIN-NEXT: ret 115773b0aaaSQihan Cai; 116773b0aaaSQihan Cai; RV64IZHINXMIN-LABEL: lround_f16: 117773b0aaaSQihan Cai; RV64IZHINXMIN: # %bb.0: 118773b0aaaSQihan Cai; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 119773b0aaaSQihan Cai; RV64IZHINXMIN-NEXT: fcvt.l.s a0, a0, rmm 120773b0aaaSQihan Cai; RV64IZHINXMIN-NEXT: ret 121773b0aaaSQihan Cai; 122773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-LABEL: lround_f16: 123773b0aaaSQihan Cai; RV32IZDINXZHINXMIN: # %bb.0: 124773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a0 125773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-NEXT: fcvt.w.s a0, a0, rmm 126773b0aaaSQihan Cai; RV32IZDINXZHINXMIN-NEXT: ret 127773b0aaaSQihan Cai; 128773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-LABEL: lround_f16: 129773b0aaaSQihan Cai; RV64IZDINXZHINXMIN: # %bb.0: 130773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a0 131773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-NEXT: fcvt.l.s a0, a0, rmm 132773b0aaaSQihan Cai; RV64IZDINXZHINXMIN-NEXT: ret 1337b50c183SMonk Chiang %1 = call iXLen @llvm.lround.iXLen.f16(half %a) 1347b50c183SMonk Chiang ret iXLen %1 1357b50c183SMonk Chiang} 136*5aa83eb6SCraig Topper 137*5aa83eb6SCraig Topperdefine i32 @lround_i32_f16(half %a) nounwind { 138*5aa83eb6SCraig Topper; RV32IZFHMIN-LABEL: lround_i32_f16: 139*5aa83eb6SCraig Topper; RV32IZFHMIN: # %bb.0: 140*5aa83eb6SCraig Topper; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa0 141*5aa83eb6SCraig Topper; RV32IZFHMIN-NEXT: fcvt.w.s a0, fa5, rmm 142*5aa83eb6SCraig Topper; RV32IZFHMIN-NEXT: ret 143*5aa83eb6SCraig Topper; 144*5aa83eb6SCraig Topper; RV64IZFHMIN-LABEL: lround_i32_f16: 145*5aa83eb6SCraig Topper; RV64IZFHMIN: # %bb.0: 146*5aa83eb6SCraig Topper; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa0 147*5aa83eb6SCraig Topper; RV64IZFHMIN-NEXT: fcvt.w.s a0, fa5, rmm 148*5aa83eb6SCraig Topper; RV64IZFHMIN-NEXT: ret 149*5aa83eb6SCraig Topper; 150*5aa83eb6SCraig Topper; RV32IDZFHMIN-LABEL: lround_i32_f16: 151*5aa83eb6SCraig Topper; RV32IDZFHMIN: # %bb.0: 152*5aa83eb6SCraig Topper; RV32IDZFHMIN-NEXT: fcvt.s.h fa5, fa0 153*5aa83eb6SCraig Topper; RV32IDZFHMIN-NEXT: fcvt.w.s a0, fa5, rmm 154*5aa83eb6SCraig Topper; RV32IDZFHMIN-NEXT: ret 155*5aa83eb6SCraig Topper; 156*5aa83eb6SCraig Topper; RV64IDZFHMIN-LABEL: lround_i32_f16: 157*5aa83eb6SCraig Topper; RV64IDZFHMIN: # %bb.0: 158*5aa83eb6SCraig Topper; RV64IDZFHMIN-NEXT: fcvt.s.h fa5, fa0 159*5aa83eb6SCraig Topper; RV64IDZFHMIN-NEXT: fcvt.w.s a0, fa5, rmm 160*5aa83eb6SCraig Topper; RV64IDZFHMIN-NEXT: ret 161*5aa83eb6SCraig Topper; 162*5aa83eb6SCraig Topper; RV32IZHINXMIN-LABEL: lround_i32_f16: 163*5aa83eb6SCraig Topper; RV32IZHINXMIN: # %bb.0: 164*5aa83eb6SCraig Topper; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 165*5aa83eb6SCraig Topper; RV32IZHINXMIN-NEXT: fcvt.w.s a0, a0, rmm 166*5aa83eb6SCraig Topper; RV32IZHINXMIN-NEXT: ret 167*5aa83eb6SCraig Topper; 168*5aa83eb6SCraig Topper; RV64IZHINXMIN-LABEL: lround_i32_f16: 169*5aa83eb6SCraig Topper; RV64IZHINXMIN: # %bb.0: 170*5aa83eb6SCraig Topper; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 171*5aa83eb6SCraig Topper; RV64IZHINXMIN-NEXT: fcvt.w.s a0, a0, rmm 172*5aa83eb6SCraig Topper; RV64IZHINXMIN-NEXT: ret 173*5aa83eb6SCraig Topper; 174*5aa83eb6SCraig Topper; RV32IZDINXZHINXMIN-LABEL: lround_i32_f16: 175*5aa83eb6SCraig Topper; RV32IZDINXZHINXMIN: # %bb.0: 176*5aa83eb6SCraig Topper; RV32IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a0 177*5aa83eb6SCraig Topper; RV32IZDINXZHINXMIN-NEXT: fcvt.w.s a0, a0, rmm 178*5aa83eb6SCraig Topper; RV32IZDINXZHINXMIN-NEXT: ret 179*5aa83eb6SCraig Topper; 180*5aa83eb6SCraig Topper; RV64IZDINXZHINXMIN-LABEL: lround_i32_f16: 181*5aa83eb6SCraig Topper; RV64IZDINXZHINXMIN: # %bb.0: 182*5aa83eb6SCraig Topper; RV64IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a0 183*5aa83eb6SCraig Topper; RV64IZDINXZHINXMIN-NEXT: fcvt.w.s a0, a0, rmm 184*5aa83eb6SCraig Topper; RV64IZDINXZHINXMIN-NEXT: ret 185*5aa83eb6SCraig Topper %1 = call i32 @llvm.lround.i32.f16(half %a) 186*5aa83eb6SCraig Topper ret i32 %1 187*5aa83eb6SCraig Topper} 188