117 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=riscv32 -mattr=+zfa,d -global-isel < %s \3; RUN: | FileCheck %s --check-prefixes=CHECK,RV32IDZFA4; RUN: llc -mtriple=riscv64 -mattr=+zfa,d -global-isel < %s \5; RUN: | FileCheck %s --check-prefixes=CHECK,RV64DZFA6 7 8define double @fceil(double %a) {9; CHECK-LABEL: fceil:10; CHECK: # %bb.0:11; CHECK-NEXT: fround.d fa0, fa0, rup12; CHECK-NEXT: ret13 %b = call double @llvm.ceil.f64(double %a)14 ret double %b15}16 17define double @ffloor(double %a) {18; CHECK-LABEL: ffloor:19; CHECK: # %bb.0:20; CHECK-NEXT: fround.d fa0, fa0, rdn21; CHECK-NEXT: ret22 %b = call double @llvm.floor.f64(double %a)23 ret double %b24}25 26define double @frint(double %a) {27; CHECK-LABEL: frint:28; CHECK: # %bb.0:29; CHECK-NEXT: froundnx.d fa0, fa030; CHECK-NEXT: ret31 %b = call double @llvm.rint.f64(double %a)32 ret double %b33}34 35define double @fnearbyint(double %a) {36; CHECK-LABEL: fnearbyint:37; CHECK: # %bb.0:38; CHECK-NEXT: fround.d fa0, fa039; CHECK-NEXT: ret40 %b = call double @llvm.nearbyint.f64(double %a)41 ret double %b42}43 44define double @fround(double %a) {45; CHECK-LABEL: fround:46; CHECK: # %bb.0:47; CHECK-NEXT: fround.d fa0, fa0, rmm48; CHECK-NEXT: ret49 %b = call double @llvm.round.f64(double %a)50 ret double %b51}52 53define double @froundeven(double %a) {54; CHECK-LABEL: froundeven:55; CHECK: # %bb.0:56; CHECK-NEXT: fround.d fa0, fa0, rne57; CHECK-NEXT: ret58 %b = call double @llvm.roundeven.f64(double %a)59 ret double %b60}61 62define double @ftrunc(double %a) {63; CHECK-LABEL: ftrunc:64; CHECK: # %bb.0:65; CHECK-NEXT: fround.d fa0, fa0, rtz66; CHECK-NEXT: ret67 %b = call double @llvm.trunc.f64(double %a)68 ret double %b69}70 71define double @fmaximum(double %a, double %b) {72; CHECK-LABEL: fmaximum:73; CHECK: # %bb.0:74; CHECK-NEXT: fmaxm.d fa0, fa0, fa175; CHECK-NEXT: ret76 %c = call double @llvm.maximum.f64(double %a, double %b)77 ret double %c78}79 80define double @fminimum(double %a, double %b) {81; CHECK-LABEL: fminimum:82; CHECK: # %bb.0:83; CHECK-NEXT: fminm.d fa0, fa0, fa184; CHECK-NEXT: ret85 %c = call double @llvm.minimum.f64(double %a, double %b)86 ret double %c87}88 89define i64 @fmvh_x_d(double %fa) {90; RV32IDZFA-LABEL: fmvh_x_d:91; RV32IDZFA: # %bb.0:92; RV32IDZFA-NEXT: fmv.x.w a0, fa093; RV32IDZFA-NEXT: fmvh.x.d a1, fa094; RV32IDZFA-NEXT: ret95;96; RV64DZFA-LABEL: fmvh_x_d:97; RV64DZFA: # %bb.0:98; RV64DZFA-NEXT: fmv.x.d a0, fa099; RV64DZFA-NEXT: ret100 %i = bitcast double %fa to i64101 ret i64 %i102}103 104define double @fmvp_d_x(i64 %a) {105; RV32IDZFA-LABEL: fmvp_d_x:106; RV32IDZFA: # %bb.0:107; RV32IDZFA-NEXT: fmvp.d.x fa0, a0, a1108; RV32IDZFA-NEXT: ret109;110; RV64DZFA-LABEL: fmvp_d_x:111; RV64DZFA: # %bb.0:112; RV64DZFA-NEXT: fmv.d.x fa0, a0113; RV64DZFA-NEXT: ret114 %or = bitcast i64 %a to double115 ret double %or116}117