117e0926dSCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2eae1e28cSAlex Bradbury; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+zfa,+zfh < %s \ 317e0926dSCraig Topper; RUN: | FileCheck %s 4eae1e28cSAlex Bradbury; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+zfa,+zfh < %s \ 517e0926dSCraig Topper; RUN: | FileCheck %s 6eae1e28cSAlex Bradbury; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+zfa,+zfhmin < %s \ 717e0926dSCraig Topper; RUN: | FileCheck %s --check-prefix=ZFHMIN 8eae1e28cSAlex Bradbury; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+zfa,+zfhmin < %s \ 917e0926dSCraig Topper; RUN: | FileCheck %s --check-prefix=ZFHMIN 1017e0926dSCraig Topper 1117e0926dSCraig Topperdefine half @loadfpimm1() { 1217e0926dSCraig Topper; CHECK-LABEL: loadfpimm1: 1317e0926dSCraig Topper; CHECK: # %bb.0: 14c2bcb21cSCraig Topper; CHECK-NEXT: fli.h fa0, 0.0625 1517e0926dSCraig Topper; CHECK-NEXT: ret 1617e0926dSCraig Topper; 1717e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm1: 1817e0926dSCraig Topper; ZFHMIN: # %bb.0: 1917e0926dSCraig Topper; ZFHMIN-NEXT: lui a0, %hi(.LCPI0_0) 2017e0926dSCraig Topper; ZFHMIN-NEXT: flh fa0, %lo(.LCPI0_0)(a0) 2117e0926dSCraig Topper; ZFHMIN-NEXT: ret 2217e0926dSCraig Topper ret half 0.0625 2317e0926dSCraig Topper} 2417e0926dSCraig Topper 2517e0926dSCraig Topperdefine half @loadfpimm2() { 2617e0926dSCraig Topper; CHECK-LABEL: loadfpimm2: 2717e0926dSCraig Topper; CHECK: # %bb.0: 28c2bcb21cSCraig Topper; CHECK-NEXT: fli.h fa0, 0.75 2917e0926dSCraig Topper; CHECK-NEXT: ret 3017e0926dSCraig Topper; 3117e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm2: 3217e0926dSCraig Topper; ZFHMIN: # %bb.0: 3317e0926dSCraig Topper; ZFHMIN-NEXT: lui a0, %hi(.LCPI1_0) 3417e0926dSCraig Topper; ZFHMIN-NEXT: flh fa0, %lo(.LCPI1_0)(a0) 3517e0926dSCraig Topper; ZFHMIN-NEXT: ret 3617e0926dSCraig Topper ret half 0.75 3717e0926dSCraig Topper} 3817e0926dSCraig Topper 3917e0926dSCraig Topperdefine half @loadfpimm3() { 4017e0926dSCraig Topper; CHECK-LABEL: loadfpimm3: 4117e0926dSCraig Topper; CHECK: # %bb.0: 42c2bcb21cSCraig Topper; CHECK-NEXT: fli.h fa0, 1.25 4317e0926dSCraig Topper; CHECK-NEXT: ret 4417e0926dSCraig Topper; 4517e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm3: 4617e0926dSCraig Topper; ZFHMIN: # %bb.0: 4717e0926dSCraig Topper; ZFHMIN-NEXT: lui a0, %hi(.LCPI2_0) 4817e0926dSCraig Topper; ZFHMIN-NEXT: flh fa0, %lo(.LCPI2_0)(a0) 4917e0926dSCraig Topper; ZFHMIN-NEXT: ret 5017e0926dSCraig Topper ret half 1.25 5117e0926dSCraig Topper} 5217e0926dSCraig Topper 5317e0926dSCraig Topperdefine half @loadfpimm4() { 5417e0926dSCraig Topper; CHECK-LABEL: loadfpimm4: 5517e0926dSCraig Topper; CHECK: # %bb.0: 56c2bcb21cSCraig Topper; CHECK-NEXT: fli.h fa0, 3.0 5717e0926dSCraig Topper; CHECK-NEXT: ret 5817e0926dSCraig Topper; 5917e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm4: 6017e0926dSCraig Topper; ZFHMIN: # %bb.0: 6117e0926dSCraig Topper; ZFHMIN-NEXT: lui a0, %hi(.LCPI3_0) 6217e0926dSCraig Topper; ZFHMIN-NEXT: flh fa0, %lo(.LCPI3_0)(a0) 6317e0926dSCraig Topper; ZFHMIN-NEXT: ret 6417e0926dSCraig Topper ret half 3.0 6517e0926dSCraig Topper} 6617e0926dSCraig Topper 6717e0926dSCraig Topperdefine half @loadfpimm5() { 6817e0926dSCraig Topper; CHECK-LABEL: loadfpimm5: 6917e0926dSCraig Topper; CHECK: # %bb.0: 70c2bcb21cSCraig Topper; CHECK-NEXT: fli.h fa0, 256.0 7117e0926dSCraig Topper; CHECK-NEXT: ret 7217e0926dSCraig Topper; 7317e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm5: 7417e0926dSCraig Topper; ZFHMIN: # %bb.0: 7517e0926dSCraig Topper; ZFHMIN-NEXT: lui a0, %hi(.LCPI4_0) 7617e0926dSCraig Topper; ZFHMIN-NEXT: flh fa0, %lo(.LCPI4_0)(a0) 7717e0926dSCraig Topper; ZFHMIN-NEXT: ret 7817e0926dSCraig Topper ret half 256.0 7917e0926dSCraig Topper} 8017e0926dSCraig Topper 8117e0926dSCraig Topperdefine half @loadfpimm6() { 8217e0926dSCraig Topper; CHECK-LABEL: loadfpimm6: 8317e0926dSCraig Topper; CHECK: # %bb.0: 8417e0926dSCraig Topper; CHECK-NEXT: fli.h fa0, inf 8517e0926dSCraig Topper; CHECK-NEXT: ret 8617e0926dSCraig Topper; 8717e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm6: 8817e0926dSCraig Topper; ZFHMIN: # %bb.0: 8917e0926dSCraig Topper; ZFHMIN-NEXT: lui a0, %hi(.LCPI5_0) 9017e0926dSCraig Topper; ZFHMIN-NEXT: flh fa0, %lo(.LCPI5_0)(a0) 9117e0926dSCraig Topper; ZFHMIN-NEXT: ret 9217e0926dSCraig Topper ret half 0xH7C00 9317e0926dSCraig Topper} 9417e0926dSCraig Topper 9517e0926dSCraig Topperdefine half @loadfpimm7() { 9617e0926dSCraig Topper; CHECK-LABEL: loadfpimm7: 9717e0926dSCraig Topper; CHECK: # %bb.0: 9817e0926dSCraig Topper; CHECK-NEXT: fli.h fa0, nan 9917e0926dSCraig Topper; CHECK-NEXT: ret 10017e0926dSCraig Topper; 10117e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm7: 10217e0926dSCraig Topper; ZFHMIN: # %bb.0: 10317e0926dSCraig Topper; ZFHMIN-NEXT: lui a0, %hi(.LCPI6_0) 10417e0926dSCraig Topper; ZFHMIN-NEXT: flh fa0, %lo(.LCPI6_0)(a0) 10517e0926dSCraig Topper; ZFHMIN-NEXT: ret 10617e0926dSCraig Topper ret half 0xH7E00 10717e0926dSCraig Topper} 10817e0926dSCraig Topper 10917e0926dSCraig Topperdefine half @loadfpimm8() { 11017e0926dSCraig Topper; CHECK-LABEL: loadfpimm8: 11117e0926dSCraig Topper; CHECK: # %bb.0: 11217e0926dSCraig Topper; CHECK-NEXT: fli.h fa0, min 11317e0926dSCraig Topper; CHECK-NEXT: ret 11417e0926dSCraig Topper; 11517e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm8: 11617e0926dSCraig Topper; ZFHMIN: # %bb.0: 11717e0926dSCraig Topper; ZFHMIN-NEXT: li a0, 1024 11817e0926dSCraig Topper; ZFHMIN-NEXT: fmv.h.x fa0, a0 11917e0926dSCraig Topper; ZFHMIN-NEXT: ret 12017e0926dSCraig Topper ret half 0xH0400 12117e0926dSCraig Topper} 12217e0926dSCraig Topper 12317e0926dSCraig Topperdefine half @loadfpimm9() { 12417e0926dSCraig Topper; CHECK-LABEL: loadfpimm9: 12517e0926dSCraig Topper; CHECK: # %bb.0: 12617e0926dSCraig Topper; CHECK-NEXT: lui a0, %hi(.LCPI8_0) 12717e0926dSCraig Topper; CHECK-NEXT: flh fa0, %lo(.LCPI8_0)(a0) 12817e0926dSCraig Topper; CHECK-NEXT: ret 12917e0926dSCraig Topper; 13017e0926dSCraig Topper; ZFHMIN-LABEL: loadfpimm9: 13117e0926dSCraig Topper; ZFHMIN: # %bb.0: 13217e0926dSCraig Topper; ZFHMIN-NEXT: lui a0, %hi(.LCPI8_0) 13317e0926dSCraig Topper; ZFHMIN-NEXT: flh fa0, %lo(.LCPI8_0)(a0) 13417e0926dSCraig Topper; ZFHMIN-NEXT: ret 13517e0926dSCraig Topper ret half 255.0 13617e0926dSCraig Topper} 137858451c5SCraig Topper 138858451c5SCraig Topper; This is 1 * 2^-16 139858451c5SCraig Topperdefine half @loadfpimm10() { 140858451c5SCraig Topper; CHECK-LABEL: loadfpimm10: 141858451c5SCraig Topper; CHECK: # %bb.0: 142bf4b9857SCraig Topper; CHECK-NEXT: fli.h fa0, 1.52587890625e-05 143858451c5SCraig Topper; CHECK-NEXT: ret 144858451c5SCraig Topper; 145858451c5SCraig Topper; ZFHMIN-LABEL: loadfpimm10: 146858451c5SCraig Topper; ZFHMIN: # %bb.0: 147858451c5SCraig Topper; ZFHMIN-NEXT: li a0, 256 148858451c5SCraig Topper; ZFHMIN-NEXT: fmv.h.x fa0, a0 149858451c5SCraig Topper; ZFHMIN-NEXT: ret 150858451c5SCraig Topper ret half 0xH0100 151858451c5SCraig Topper} 152858451c5SCraig Topper 153858451c5SCraig Topper; This is 1 * 2^-15 154858451c5SCraig Topperdefine half @loadfpimm11() { 155858451c5SCraig Topper; CHECK-LABEL: loadfpimm11: 156858451c5SCraig Topper; CHECK: # %bb.0: 157bf4b9857SCraig Topper; CHECK-NEXT: fli.h fa0, 3.0517578125e-05 158858451c5SCraig Topper; CHECK-NEXT: ret 159858451c5SCraig Topper; 160858451c5SCraig Topper; ZFHMIN-LABEL: loadfpimm11: 161858451c5SCraig Topper; ZFHMIN: # %bb.0: 162858451c5SCraig Topper; ZFHMIN-NEXT: li a0, 512 163858451c5SCraig Topper; ZFHMIN-NEXT: fmv.h.x fa0, a0 164858451c5SCraig Topper; ZFHMIN-NEXT: ret 165858451c5SCraig Topper ret half 0xH0200 166858451c5SCraig Topper} 167c09730c2SCraig Topper 168c09730c2SCraig Topper; Negative test. This is an snan with payload of 1. 169c09730c2SCraig Topperdefine half @loadfpimm12() { 170c09730c2SCraig Topper; CHECK-LABEL: loadfpimm12: 171c09730c2SCraig Topper; CHECK: # %bb.0: 172c09730c2SCraig Topper; CHECK-NEXT: lui a0, %hi(.LCPI11_0) 173c09730c2SCraig Topper; CHECK-NEXT: flh fa0, %lo(.LCPI11_0)(a0) 174c09730c2SCraig Topper; CHECK-NEXT: ret 175c09730c2SCraig Topper; 176c09730c2SCraig Topper; ZFHMIN-LABEL: loadfpimm12: 177c09730c2SCraig Topper; ZFHMIN: # %bb.0: 178c09730c2SCraig Topper; ZFHMIN-NEXT: lui a0, %hi(.LCPI11_0) 179c09730c2SCraig Topper; ZFHMIN-NEXT: flh fa0, %lo(.LCPI11_0)(a0) 180c09730c2SCraig Topper; ZFHMIN-NEXT: ret 181c09730c2SCraig Topper ret half 0xH7c01 182c09730c2SCraig Topper} 183451255b2SAlex Bradbury 184451255b2SAlex Bradburydefine half @loadfpimm13() { 185451255b2SAlex Bradbury; CHECK-LABEL: loadfpimm13: 186451255b2SAlex Bradbury; CHECK: # %bb.0: 187451255b2SAlex Bradbury; CHECK-NEXT: fli.h fa0, -1.0 188451255b2SAlex Bradbury; CHECK-NEXT: ret 189451255b2SAlex Bradbury; 190451255b2SAlex Bradbury; ZFHMIN-LABEL: loadfpimm13: 191451255b2SAlex Bradbury; ZFHMIN: # %bb.0: 192451255b2SAlex Bradbury; ZFHMIN-NEXT: lui a0, %hi(.LCPI12_0) 193451255b2SAlex Bradbury; ZFHMIN-NEXT: flh fa0, %lo(.LCPI12_0)(a0) 194451255b2SAlex Bradbury; ZFHMIN-NEXT: ret 195451255b2SAlex Bradbury ret half -1.0 196451255b2SAlex Bradbury} 197451255b2SAlex Bradbury 198*87f67175SMin-Yih Hsu; Ensure fli isn't directly used for negated versions of numbers in the fli 199451255b2SAlex Bradbury; table. 200451255b2SAlex Bradburydefine half @loadfpimm14() { 201451255b2SAlex Bradbury; CHECK-LABEL: loadfpimm14: 202451255b2SAlex Bradbury; CHECK: # %bb.0: 203*87f67175SMin-Yih Hsu; CHECK-NEXT: fli.h fa5, 2.0 204*87f67175SMin-Yih Hsu; CHECK-NEXT: fneg.h fa0, fa5 205451255b2SAlex Bradbury; CHECK-NEXT: ret 206451255b2SAlex Bradbury; 207451255b2SAlex Bradbury; ZFHMIN-LABEL: loadfpimm14: 208451255b2SAlex Bradbury; ZFHMIN: # %bb.0: 209451255b2SAlex Bradbury; ZFHMIN-NEXT: lui a0, 1048572 210451255b2SAlex Bradbury; ZFHMIN-NEXT: fmv.h.x fa0, a0 211451255b2SAlex Bradbury; ZFHMIN-NEXT: ret 212451255b2SAlex Bradbury ret half -2.0 213451255b2SAlex Bradbury} 214be0cbe91SCraig Topper 215*87f67175SMin-Yih Hsu; Ensure fli isn't directly used for negative min normal value. 216be0cbe91SCraig Topperdefine half @loadfpimm15() { 217be0cbe91SCraig Topper; CHECK-LABEL: loadfpimm15: 218be0cbe91SCraig Topper; CHECK: # %bb.0: 219*87f67175SMin-Yih Hsu; CHECK-NEXT: fli.h fa5, min 220*87f67175SMin-Yih Hsu; CHECK-NEXT: fneg.h fa0, fa5 221be0cbe91SCraig Topper; CHECK-NEXT: ret 222be0cbe91SCraig Topper; 223be0cbe91SCraig Topper; ZFHMIN-LABEL: loadfpimm15: 224be0cbe91SCraig Topper; ZFHMIN: # %bb.0: 225be0cbe91SCraig Topper; ZFHMIN-NEXT: lui a0, %hi(.LCPI14_0) 226be0cbe91SCraig Topper; ZFHMIN-NEXT: flh fa0, %lo(.LCPI14_0)(a0) 227be0cbe91SCraig Topper; ZFHMIN-NEXT: ret 228be0cbe91SCraig Topper ret half 0xH8400 229be0cbe91SCraig Topper} 230