| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| ; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+experimental-zfa,+zfh < %s \ |
| ; RUN: | FileCheck %s |
| ; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+experimental-zfa,+zfh < %s \ |
| ; RUN: | FileCheck %s |
| ; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+experimental-zfa,+zfhmin < %s \ |
| ; RUN: | FileCheck %s --check-prefix=ZFHMIN |
| ; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+experimental-zfa,+zfhmin < %s \ |
| ; RUN: | FileCheck %s --check-prefix=ZFHMIN |
| |
| define half @loadfpimm1() { |
| ; CHECK-LABEL: loadfpimm1: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: fli.h fa0, 0.0625 |
| ; CHECK-NEXT: ret |
| ; |
| ; ZFHMIN-LABEL: loadfpimm1: |
| ; ZFHMIN: # %bb.0: |
| ; ZFHMIN-NEXT: lui a0, %hi(.LCPI0_0) |
| ; ZFHMIN-NEXT: flh fa0, %lo(.LCPI0_0)(a0) |
| ; ZFHMIN-NEXT: ret |
| ret half 0.0625 |
| } |
| |
| define half @loadfpimm2() { |
| ; CHECK-LABEL: loadfpimm2: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: fli.h fa0, 0.75 |
| ; CHECK-NEXT: ret |
| ; |
| ; ZFHMIN-LABEL: loadfpimm2: |
| ; ZFHMIN: # %bb.0: |
| ; ZFHMIN-NEXT: lui a0, %hi(.LCPI1_0) |
| ; ZFHMIN-NEXT: flh fa0, %lo(.LCPI1_0)(a0) |
| ; ZFHMIN-NEXT: ret |
| ret half 0.75 |
| } |
| |
| define half @loadfpimm3() { |
| ; CHECK-LABEL: loadfpimm3: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: fli.h fa0, 1.25 |
| ; CHECK-NEXT: ret |
| ; |
| ; ZFHMIN-LABEL: loadfpimm3: |
| ; ZFHMIN: # %bb.0: |
| ; ZFHMIN-NEXT: lui a0, %hi(.LCPI2_0) |
| ; ZFHMIN-NEXT: flh fa0, %lo(.LCPI2_0)(a0) |
| ; ZFHMIN-NEXT: ret |
| ret half 1.25 |
| } |
| |
| define half @loadfpimm4() { |
| ; CHECK-LABEL: loadfpimm4: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: fli.h fa0, 3.0 |
| ; CHECK-NEXT: ret |
| ; |
| ; ZFHMIN-LABEL: loadfpimm4: |
| ; ZFHMIN: # %bb.0: |
| ; ZFHMIN-NEXT: lui a0, %hi(.LCPI3_0) |
| ; ZFHMIN-NEXT: flh fa0, %lo(.LCPI3_0)(a0) |
| ; ZFHMIN-NEXT: ret |
| ret half 3.0 |
| } |
| |
| define half @loadfpimm5() { |
| ; CHECK-LABEL: loadfpimm5: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: fli.h fa0, 256.0 |
| ; CHECK-NEXT: ret |
| ; |
| ; ZFHMIN-LABEL: loadfpimm5: |
| ; ZFHMIN: # %bb.0: |
| ; ZFHMIN-NEXT: lui a0, %hi(.LCPI4_0) |
| ; ZFHMIN-NEXT: flh fa0, %lo(.LCPI4_0)(a0) |
| ; ZFHMIN-NEXT: ret |
| ret half 256.0 |
| } |
| |
| define half @loadfpimm6() { |
| ; CHECK-LABEL: loadfpimm6: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: fli.h fa0, inf |
| ; CHECK-NEXT: ret |
| ; |
| ; ZFHMIN-LABEL: loadfpimm6: |
| ; ZFHMIN: # %bb.0: |
| ; ZFHMIN-NEXT: lui a0, %hi(.LCPI5_0) |
| ; ZFHMIN-NEXT: flh fa0, %lo(.LCPI5_0)(a0) |
| ; ZFHMIN-NEXT: ret |
| ret half 0xH7C00 |
| } |
| |
| define half @loadfpimm7() { |
| ; CHECK-LABEL: loadfpimm7: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: fli.h fa0, nan |
| ; CHECK-NEXT: ret |
| ; |
| ; ZFHMIN-LABEL: loadfpimm7: |
| ; ZFHMIN: # %bb.0: |
| ; ZFHMIN-NEXT: lui a0, %hi(.LCPI6_0) |
| ; ZFHMIN-NEXT: flh fa0, %lo(.LCPI6_0)(a0) |
| ; ZFHMIN-NEXT: ret |
| ret half 0xH7E00 |
| } |
| |
| define half @loadfpimm8() { |
| ; CHECK-LABEL: loadfpimm8: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: fli.h fa0, min |
| ; CHECK-NEXT: ret |
| ; |
| ; ZFHMIN-LABEL: loadfpimm8: |
| ; ZFHMIN: # %bb.0: |
| ; ZFHMIN-NEXT: li a0, 1024 |
| ; ZFHMIN-NEXT: fmv.h.x fa0, a0 |
| ; ZFHMIN-NEXT: ret |
| ret half 0xH0400 |
| } |
| |
| define half @loadfpimm9() { |
| ; CHECK-LABEL: loadfpimm9: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: lui a0, %hi(.LCPI8_0) |
| ; CHECK-NEXT: flh fa0, %lo(.LCPI8_0)(a0) |
| ; CHECK-NEXT: ret |
| ; |
| ; ZFHMIN-LABEL: loadfpimm9: |
| ; ZFHMIN: # %bb.0: |
| ; ZFHMIN-NEXT: lui a0, %hi(.LCPI8_0) |
| ; ZFHMIN-NEXT: flh fa0, %lo(.LCPI8_0)(a0) |
| ; ZFHMIN-NEXT: ret |
| ret half 255.0 |
| } |
| |
| ; This is 1 * 2^-16 |
| define half @loadfpimm10() { |
| ; CHECK-LABEL: loadfpimm10: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: fli.h fa0, 1.52587890625e-05 |
| ; CHECK-NEXT: ret |
| ; |
| ; ZFHMIN-LABEL: loadfpimm10: |
| ; ZFHMIN: # %bb.0: |
| ; ZFHMIN-NEXT: li a0, 256 |
| ; ZFHMIN-NEXT: fmv.h.x fa0, a0 |
| ; ZFHMIN-NEXT: ret |
| ret half 0xH0100 |
| } |
| |
| ; This is 1 * 2^-15 |
| define half @loadfpimm11() { |
| ; CHECK-LABEL: loadfpimm11: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: fli.h fa0, 3.0517578125e-05 |
| ; CHECK-NEXT: ret |
| ; |
| ; ZFHMIN-LABEL: loadfpimm11: |
| ; ZFHMIN: # %bb.0: |
| ; ZFHMIN-NEXT: li a0, 512 |
| ; ZFHMIN-NEXT: fmv.h.x fa0, a0 |
| ; ZFHMIN-NEXT: ret |
| ret half 0xH0200 |
| } |
| |
| ; Negative test. This is an snan with payload of 1. |
| define half @loadfpimm12() { |
| ; CHECK-LABEL: loadfpimm12: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: lui a0, %hi(.LCPI11_0) |
| ; CHECK-NEXT: flh fa0, %lo(.LCPI11_0)(a0) |
| ; CHECK-NEXT: ret |
| ; |
| ; ZFHMIN-LABEL: loadfpimm12: |
| ; ZFHMIN: # %bb.0: |
| ; ZFHMIN-NEXT: lui a0, %hi(.LCPI11_0) |
| ; ZFHMIN-NEXT: flh fa0, %lo(.LCPI11_0)(a0) |
| ; ZFHMIN-NEXT: ret |
| ret half 0xH7c01 |
| } |