; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=riscv32 -mattr=+zfh,+zfa,+zvfh,+v -target-abi ilp32d -verify-machineinstrs < %s \ ; RUN: | FileCheck %s --check-prefixes=CHECK ; RUN: llc -mtriple=riscv64 -mattr=+zfh,+zfa,+zvfh,+v -target-abi lp64d -verify-machineinstrs < %s \ ; RUN: | FileCheck %s --check-prefixes=CHECK define @vsplat_f16_0p625() { ; CHECK-LABEL: vsplat_f16_0p625: ; CHECK: # %bb.0: ; CHECK-NEXT: fli.h fa5, 0.625 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma ; CHECK-NEXT: vfmv.v.f v8, fa5 ; CHECK-NEXT: ret ret splat (half 0.625) } define @vsplat_f32_0p75() { ; CHECK-LABEL: vsplat_f32_0p75: ; CHECK: # %bb.0: ; CHECK-NEXT: fli.s fa5, 0.75 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma ; CHECK-NEXT: vfmv.v.f v8, fa5 ; CHECK-NEXT: ret ret splat (float 0.75) } define @vsplat_f64_neg1() { ; CHECK-LABEL: vsplat_f64_neg1: ; CHECK: # %bb.0: ; CHECK-NEXT: fli.d fa5, -1.0 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma ; CHECK-NEXT: vfmv.v.f v8, fa5 ; CHECK-NEXT: ret ret splat (double -1.0) } define @vfnmsac( %va, %vb) { ; CHECK-LABEL: vfnmsac: ; CHECK: # %bb.0: ; CHECK-NEXT: fli.s fa5, 2.0 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma ; CHECK-NEXT: vfnmsac.vf v8, fa5, v10 ; CHECK-NEXT: ret %vd = tail call @llvm.fmuladd.nxv4f32( %vb, splat (float -2.000000e+00), %va) ret %vd } define @vfnmsub( %va, %vb) { ; CHECK-LABEL: vfnmsub: ; CHECK: # %bb.0: ; CHECK-NEXT: fli.s fa5, 2.0 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma ; CHECK-NEXT: vfnmsub.vf v8, fa5, v10 ; CHECK-NEXT: ret %vd = tail call @llvm.fmuladd.nxv4f32( splat (float -2.000000e+00), %va, %vb) ret %vd } define @vfnmacc( %va, %vb) { ; CHECK-LABEL: vfnmacc: ; CHECK: # %bb.0: ; CHECK-NEXT: fli.s fa5, 2.0 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma ; CHECK-NEXT: vfnmacc.vf v8, fa5, v12 ; CHECK-NEXT: ret %neg = fneg %va %vd = call @llvm.fma.v8f32( %vb, splat (float -2.000000e+00), %neg) ret %vd } define @vfnmadd( %va, %vb) { ; CHECK-LABEL: vfnmadd: ; CHECK: # %bb.0: ; CHECK-NEXT: fli.s fa5, 2.0 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma ; CHECK-NEXT: vfnmadd.vf v8, fa5, v12 ; CHECK-NEXT: ret %neg = fneg %vb %vd = call @llvm.fma.v8f32( %va, splat (float -2.000000e+00), %neg) ret %vd } define @vfadd_vf_neg( %va) { ; CHECK-LABEL: vfadd_vf_neg: ; CHECK: # %bb.0: ; CHECK-NEXT: fli.s fa5, 2.0 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma ; CHECK-NEXT: vfsub.vf v8, v8, fa5 ; CHECK-NEXT: ret %vd = fadd %va, splat (float -2.000000e+00) ret %vd } define @vfsub_vf_neg( %va) { ; CHECK-LABEL: vfsub_vf_neg: ; CHECK: # %bb.0: ; CHECK-NEXT: fli.s fa5, 2.0 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma ; CHECK-NEXT: vfadd.vf v8, v8, fa5 ; CHECK-NEXT: ret %vd = fsub %va, splat (float -2.000000e+00) ret %vd } define @vfsub_vf( %va) { ; CHECK-LABEL: vfsub_vf: ; CHECK: # %bb.0: ; CHECK-NEXT: fli.s fa5, 2.0 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma ; CHECK-NEXT: vfsub.vf v8, v8, fa5 ; CHECK-NEXT: ret %vd = fsub %va, splat (float 2.000000e+00) ret %vd } define @vfadd_vf( %va) { ; CHECK-LABEL: vfadd_vf: ; CHECK: # %bb.0: ; CHECK-NEXT: fli.s fa5, 2.0 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma ; CHECK-NEXT: vfadd.vf v8, v8, fa5 ; CHECK-NEXT: ret %vd = fadd %va, splat (float 2.000000e+00) ret %vd }