110129fe8SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2a0a76feeSShao-Ce SUN; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zfh \ 310129fe8SCraig Topper; RUN: -verify-machineinstrs -target-abi ilp32f | \ 410129fe8SCraig Topper; RUN: FileCheck -check-prefix=RV32IZFH %s 5a0a76feeSShao-Ce SUN; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zfh \ 610129fe8SCraig Topper; RUN: -verify-machineinstrs -target-abi lp64f | \ 710129fe8SCraig Topper; RUN: FileCheck -check-prefix=RV64IZFH %s 8*773b0aaaSQihan Cai; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=zhinx \ 9*773b0aaaSQihan Cai; RUN: -verify-machineinstrs -target-abi ilp32 | \ 10*773b0aaaSQihan Cai; RUN: FileCheck -check-prefix=RV32IZHINX %s 11*773b0aaaSQihan Cai; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=zhinx \ 12*773b0aaaSQihan Cai; RUN: -verify-machineinstrs -target-abi lp64 | \ 13*773b0aaaSQihan Cai; RUN: FileCheck -check-prefix=RV64IZHINX %s 1410129fe8SCraig Topper; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+d \ 15a0a76feeSShao-Ce SUN; RUN: -mattr=+zfh -verify-machineinstrs -target-abi ilp32d | \ 1610129fe8SCraig Topper; RUN: FileCheck -check-prefix=RV32IDZFH %s 1710129fe8SCraig Topper; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+d \ 18a0a76feeSShao-Ce SUN; RUN: -mattr=+zfh -verify-machineinstrs -target-abi lp64d | \ 1910129fe8SCraig Topper; RUN: FileCheck -check-prefix=RV64IDZFH %s 20*773b0aaaSQihan Cai; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zdinx \ 21*773b0aaaSQihan Cai; RUN: -mattr=+zhinx -verify-machineinstrs -target-abi ilp32 | \ 22*773b0aaaSQihan Cai; RUN: FileCheck -check-prefix=RV32IZDINXZHINX %s 23*773b0aaaSQihan Cai; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zdinx \ 24*773b0aaaSQihan Cai; RUN: -mattr=+zhinx -verify-machineinstrs -target-abi lp64 | \ 25*773b0aaaSQihan Cai; RUN: FileCheck -check-prefix=RV64IZDINXZHINX %s 2610129fe8SCraig Topper 2710129fe8SCraig Topper; These intrinsics require half to be a legal type. 2810129fe8SCraig Topper 2910129fe8SCraig Topperdeclare iXLen @llvm.lrint.iXLen.f16(half) 3010129fe8SCraig Topper 3110129fe8SCraig Topperdefine iXLen @lrint_f16(half %a) nounwind { 3210129fe8SCraig Topper; RV32IZFH-LABEL: lrint_f16: 3310129fe8SCraig Topper; RV32IZFH: # %bb.0: 3410129fe8SCraig Topper; RV32IZFH-NEXT: fcvt.w.h a0, fa0 3510129fe8SCraig Topper; RV32IZFH-NEXT: ret 3610129fe8SCraig Topper; 3710129fe8SCraig Topper; RV64IZFH-LABEL: lrint_f16: 3810129fe8SCraig Topper; RV64IZFH: # %bb.0: 3910129fe8SCraig Topper; RV64IZFH-NEXT: fcvt.l.h a0, fa0 4010129fe8SCraig Topper; RV64IZFH-NEXT: ret 4110129fe8SCraig Topper; 42*773b0aaaSQihan Cai; RV32IZHINX-LABEL: lrint_f16: 43*773b0aaaSQihan Cai; RV32IZHINX: # %bb.0: 44*773b0aaaSQihan Cai; RV32IZHINX-NEXT: fcvt.w.h a0, a0 45*773b0aaaSQihan Cai; RV32IZHINX-NEXT: ret 46*773b0aaaSQihan Cai; 47*773b0aaaSQihan Cai; RV64IZHINX-LABEL: lrint_f16: 48*773b0aaaSQihan Cai; RV64IZHINX: # %bb.0: 49*773b0aaaSQihan Cai; RV64IZHINX-NEXT: fcvt.l.h a0, a0 50*773b0aaaSQihan Cai; RV64IZHINX-NEXT: ret 51*773b0aaaSQihan Cai; 5210129fe8SCraig Topper; RV32IDZFH-LABEL: lrint_f16: 5310129fe8SCraig Topper; RV32IDZFH: # %bb.0: 5410129fe8SCraig Topper; RV32IDZFH-NEXT: fcvt.w.h a0, fa0 5510129fe8SCraig Topper; RV32IDZFH-NEXT: ret 5610129fe8SCraig Topper; 5710129fe8SCraig Topper; RV64IDZFH-LABEL: lrint_f16: 5810129fe8SCraig Topper; RV64IDZFH: # %bb.0: 5910129fe8SCraig Topper; RV64IDZFH-NEXT: fcvt.l.h a0, fa0 6010129fe8SCraig Topper; RV64IDZFH-NEXT: ret 61*773b0aaaSQihan Cai; 62*773b0aaaSQihan Cai; RV32IZDINXZHINX-LABEL: lrint_f16: 63*773b0aaaSQihan Cai; RV32IZDINXZHINX: # %bb.0: 64*773b0aaaSQihan Cai; RV32IZDINXZHINX-NEXT: fcvt.w.h a0, a0 65*773b0aaaSQihan Cai; RV32IZDINXZHINX-NEXT: ret 66*773b0aaaSQihan Cai; 67*773b0aaaSQihan Cai; RV64IZDINXZHINX-LABEL: lrint_f16: 68*773b0aaaSQihan Cai; RV64IZDINXZHINX: # %bb.0: 69*773b0aaaSQihan Cai; RV64IZDINXZHINX-NEXT: fcvt.l.h a0, a0 70*773b0aaaSQihan Cai; RV64IZDINXZHINX-NEXT: ret 7110129fe8SCraig Topper %1 = call iXLen @llvm.lrint.iXLen.f16(half %a) 7210129fe8SCraig Topper ret iXLen %1 7310129fe8SCraig Topper} 7410129fe8SCraig Topper 75d7c97e91SCraig Topperdeclare i32 @llvm.lround.i32.f16(half) 76d7c97e91SCraig Topperdeclare i64 @llvm.lround.i64.f16(half) 7710129fe8SCraig Topper 7810129fe8SCraig Topperdefine iXLen @lround_f16(half %a) nounwind { 7910129fe8SCraig Topper; RV32IZFH-LABEL: lround_f16: 8010129fe8SCraig Topper; RV32IZFH: # %bb.0: 8110129fe8SCraig Topper; RV32IZFH-NEXT: fcvt.w.h a0, fa0, rmm 8210129fe8SCraig Topper; RV32IZFH-NEXT: ret 8310129fe8SCraig Topper; 8410129fe8SCraig Topper; RV64IZFH-LABEL: lround_f16: 8510129fe8SCraig Topper; RV64IZFH: # %bb.0: 8610129fe8SCraig Topper; RV64IZFH-NEXT: fcvt.l.h a0, fa0, rmm 8710129fe8SCraig Topper; RV64IZFH-NEXT: ret 8810129fe8SCraig Topper; 89*773b0aaaSQihan Cai; RV32IZHINX-LABEL: lround_f16: 90*773b0aaaSQihan Cai; RV32IZHINX: # %bb.0: 91*773b0aaaSQihan Cai; RV32IZHINX-NEXT: fcvt.w.h a0, a0, rmm 92*773b0aaaSQihan Cai; RV32IZHINX-NEXT: ret 93*773b0aaaSQihan Cai; 94*773b0aaaSQihan Cai; RV64IZHINX-LABEL: lround_f16: 95*773b0aaaSQihan Cai; RV64IZHINX: # %bb.0: 96*773b0aaaSQihan Cai; RV64IZHINX-NEXT: fcvt.l.h a0, a0, rmm 97*773b0aaaSQihan Cai; RV64IZHINX-NEXT: ret 98*773b0aaaSQihan Cai; 9910129fe8SCraig Topper; RV32IDZFH-LABEL: lround_f16: 10010129fe8SCraig Topper; RV32IDZFH: # %bb.0: 10110129fe8SCraig Topper; RV32IDZFH-NEXT: fcvt.w.h a0, fa0, rmm 10210129fe8SCraig Topper; RV32IDZFH-NEXT: ret 10310129fe8SCraig Topper; 10410129fe8SCraig Topper; RV64IDZFH-LABEL: lround_f16: 10510129fe8SCraig Topper; RV64IDZFH: # %bb.0: 10610129fe8SCraig Topper; RV64IDZFH-NEXT: fcvt.l.h a0, fa0, rmm 10710129fe8SCraig Topper; RV64IDZFH-NEXT: ret 108*773b0aaaSQihan Cai; 109*773b0aaaSQihan Cai; RV32IZDINXZHINX-LABEL: lround_f16: 110*773b0aaaSQihan Cai; RV32IZDINXZHINX: # %bb.0: 111*773b0aaaSQihan Cai; RV32IZDINXZHINX-NEXT: fcvt.w.h a0, a0, rmm 112*773b0aaaSQihan Cai; RV32IZDINXZHINX-NEXT: ret 113*773b0aaaSQihan Cai; 114*773b0aaaSQihan Cai; RV64IZDINXZHINX-LABEL: lround_f16: 115*773b0aaaSQihan Cai; RV64IZDINXZHINX: # %bb.0: 116*773b0aaaSQihan Cai; RV64IZDINXZHINX-NEXT: fcvt.l.h a0, a0, rmm 117*773b0aaaSQihan Cai; RV64IZDINXZHINX-NEXT: ret 11810129fe8SCraig Topper %1 = call iXLen @llvm.lround.iXLen.f16(half %a) 11910129fe8SCraig Topper ret iXLen %1 12010129fe8SCraig Topper} 121d7c97e91SCraig Topper 122d7c97e91SCraig Topperdefine i32 @lround_i32_f16(half %a) nounwind { 123d7c97e91SCraig Topper; RV32IZFH-LABEL: lround_i32_f16: 124d7c97e91SCraig Topper; RV32IZFH: # %bb.0: 125d7c97e91SCraig Topper; RV32IZFH-NEXT: fcvt.w.h a0, fa0, rmm 126d7c97e91SCraig Topper; RV32IZFH-NEXT: ret 127d7c97e91SCraig Topper; 128d7c97e91SCraig Topper; RV64IZFH-LABEL: lround_i32_f16: 129d7c97e91SCraig Topper; RV64IZFH: # %bb.0: 130d7c97e91SCraig Topper; RV64IZFH-NEXT: fcvt.w.h a0, fa0, rmm 131d7c97e91SCraig Topper; RV64IZFH-NEXT: ret 132d7c97e91SCraig Topper; 133*773b0aaaSQihan Cai; RV32IZHINX-LABEL: lround_i32_f16: 134*773b0aaaSQihan Cai; RV32IZHINX: # %bb.0: 135*773b0aaaSQihan Cai; RV32IZHINX-NEXT: fcvt.w.h a0, a0, rmm 136*773b0aaaSQihan Cai; RV32IZHINX-NEXT: ret 137*773b0aaaSQihan Cai; 138*773b0aaaSQihan Cai; RV64IZHINX-LABEL: lround_i32_f16: 139*773b0aaaSQihan Cai; RV64IZHINX: # %bb.0: 140*773b0aaaSQihan Cai; RV64IZHINX-NEXT: fcvt.w.h a0, a0, rmm 141*773b0aaaSQihan Cai; RV64IZHINX-NEXT: ret 142*773b0aaaSQihan Cai; 143d7c97e91SCraig Topper; RV32IDZFH-LABEL: lround_i32_f16: 144d7c97e91SCraig Topper; RV32IDZFH: # %bb.0: 145d7c97e91SCraig Topper; RV32IDZFH-NEXT: fcvt.w.h a0, fa0, rmm 146d7c97e91SCraig Topper; RV32IDZFH-NEXT: ret 147d7c97e91SCraig Topper; 148d7c97e91SCraig Topper; RV64IDZFH-LABEL: lround_i32_f16: 149d7c97e91SCraig Topper; RV64IDZFH: # %bb.0: 150d7c97e91SCraig Topper; RV64IDZFH-NEXT: fcvt.w.h a0, fa0, rmm 151d7c97e91SCraig Topper; RV64IDZFH-NEXT: ret 152*773b0aaaSQihan Cai; 153*773b0aaaSQihan Cai; RV32IZDINXZHINX-LABEL: lround_i32_f16: 154*773b0aaaSQihan Cai; RV32IZDINXZHINX: # %bb.0: 155*773b0aaaSQihan Cai; RV32IZDINXZHINX-NEXT: fcvt.w.h a0, a0, rmm 156*773b0aaaSQihan Cai; RV32IZDINXZHINX-NEXT: ret 157*773b0aaaSQihan Cai; 158*773b0aaaSQihan Cai; RV64IZDINXZHINX-LABEL: lround_i32_f16: 159*773b0aaaSQihan Cai; RV64IZDINXZHINX: # %bb.0: 160*773b0aaaSQihan Cai; RV64IZDINXZHINX-NEXT: fcvt.w.h a0, a0, rmm 161*773b0aaaSQihan Cai; RV64IZDINXZHINX-NEXT: ret 162d7c97e91SCraig Topper %1 = call i32 @llvm.lround.i32.f16(half %a) 163d7c97e91SCraig Topper ret i32 %1 164d7c97e91SCraig Topper} 165