1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+f -verify-machineinstrs < %s \ 3; RUN: -target-abi=ilp32f | FileCheck %s 4; RUN: llc -mtriple=riscv64 -mattr=+f -verify-machineinstrs < %s \ 5; RUN: -target-abi=lp64f | FileCheck %s 6; RUN: llc -mtriple=riscv32 -mattr=+zfinx -verify-machineinstrs < %s \ 7; RUN: -target-abi=ilp32 | FileCheck --check-prefixes=CHECKZFINX,RV32ZFINX %s 8; RUN: llc -mtriple=riscv64 -mattr=+zfinx -verify-machineinstrs < %s \ 9; RUN: -target-abi=lp64 | FileCheck --check-prefixes=CHECKZFINX,RV64ZFINX %s 10 11; TODO: constant pool shouldn't be necessary for RV64IF. 12define float @float_imm() nounwind { 13; CHECK-LABEL: float_imm: 14; CHECK: # %bb.0: 15; CHECK-NEXT: lui a0, %hi(.LCPI0_0) 16; CHECK-NEXT: flw fa0, %lo(.LCPI0_0)(a0) 17; CHECK-NEXT: ret 18; 19; RV32ZFINX-LABEL: float_imm: 20; RV32ZFINX: # %bb.0: 21; RV32ZFINX-NEXT: lui a0, 263313 22; RV32ZFINX-NEXT: addi a0, a0, -37 23; RV32ZFINX-NEXT: # kill: def $x10_w killed $x10_w killed $x10 24; RV32ZFINX-NEXT: ret 25; 26; RV64ZFINX-LABEL: float_imm: 27; RV64ZFINX: # %bb.0: 28; RV64ZFINX-NEXT: lui a0, 263313 29; RV64ZFINX-NEXT: addiw a0, a0, -37 30; RV64ZFINX-NEXT: # kill: def $x10_w killed $x10_w killed $x10 31; RV64ZFINX-NEXT: ret 32 ret float 3.14159274101257324218750 33} 34 35define float @float_imm_op(float %a) nounwind { 36; CHECK-LABEL: float_imm_op: 37; CHECK: # %bb.0: 38; CHECK-NEXT: lui a0, 260096 39; CHECK-NEXT: fmv.w.x fa5, a0 40; CHECK-NEXT: fadd.s fa0, fa0, fa5 41; CHECK-NEXT: ret 42; 43; CHECKZFINX-LABEL: float_imm_op: 44; CHECKZFINX: # %bb.0: 45; CHECKZFINX-NEXT: lui a1, 260096 46; CHECKZFINX-NEXT: fadd.s a0, a0, a1 47; CHECKZFINX-NEXT: ret 48 %1 = fadd float %a, 1.0 49 ret float %1 50} 51 52define float @float_positive_zero(ptr %pf) nounwind { 53; CHECK-LABEL: float_positive_zero: 54; CHECK: # %bb.0: 55; CHECK-NEXT: fmv.w.x fa0, zero 56; CHECK-NEXT: ret 57; 58; CHECKZFINX-LABEL: float_positive_zero: 59; CHECKZFINX: # %bb.0: 60; CHECKZFINX-NEXT: li a0, 0 61; CHECKZFINX-NEXT: ret 62 ret float 0.0 63} 64 65define float @float_negative_zero(ptr %pf) nounwind { 66; CHECK-LABEL: float_negative_zero: 67; CHECK: # %bb.0: 68; CHECK-NEXT: lui a0, 524288 69; CHECK-NEXT: fmv.w.x fa0, a0 70; CHECK-NEXT: ret 71; 72; CHECKZFINX-LABEL: float_negative_zero: 73; CHECKZFINX: # %bb.0: 74; CHECKZFINX-NEXT: lui a0, 524288 75; CHECKZFINX-NEXT: ret 76 ret float -0.0 77} 78