14ff62052SZhaoQi; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 24ff62052SZhaoQi; RUN: llc --mtriple=loongarch64 --mattr=-lsx < %s | FileCheck %s --check-prefix=NOLSX 34ff62052SZhaoQi; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s --check-prefix=LSX 44ff62052SZhaoQi 54ff62052SZhaoQi;; ceilf 64ff62052SZhaoQidefine float @ceil_f32(float %i) nounwind { 74ff62052SZhaoQi; NOLSX-LABEL: ceil_f32: 84ff62052SZhaoQi; NOLSX: # %bb.0: # %entry 94ff62052SZhaoQi; NOLSX-NEXT: b %plt(ceilf) 104ff62052SZhaoQi; 114ff62052SZhaoQi; LSX-LABEL: ceil_f32: 124ff62052SZhaoQi; LSX: # %bb.0: # %entry 13*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0 killed $f0 def $vr0 14*92be2cb0SZhaoQi; LSX-NEXT: vreplvei.w $vr0, $vr0, 0 15*92be2cb0SZhaoQi; LSX-NEXT: vfrintrp.s $vr0, $vr0 16*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0 killed $f0 killed $vr0 17*92be2cb0SZhaoQi; LSX-NEXT: ret 184ff62052SZhaoQientry: 194ff62052SZhaoQi %0 = call float @llvm.ceil.f32(float %i) 204ff62052SZhaoQi ret float %0 214ff62052SZhaoQi} 224ff62052SZhaoQi 234ff62052SZhaoQi;; ceil 244ff62052SZhaoQidefine double @ceil_f64(double %i) nounwind { 254ff62052SZhaoQi; NOLSX-LABEL: ceil_f64: 264ff62052SZhaoQi; NOLSX: # %bb.0: # %entry 274ff62052SZhaoQi; NOLSX-NEXT: b %plt(ceil) 284ff62052SZhaoQi; 294ff62052SZhaoQi; LSX-LABEL: ceil_f64: 304ff62052SZhaoQi; LSX: # %bb.0: # %entry 31*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0 32*92be2cb0SZhaoQi; LSX-NEXT: vreplvei.d $vr0, $vr0, 0 33*92be2cb0SZhaoQi; LSX-NEXT: vfrintrp.d $vr0, $vr0 34*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0 35*92be2cb0SZhaoQi; LSX-NEXT: ret 364ff62052SZhaoQientry: 374ff62052SZhaoQi %0 = call double @llvm.ceil.f64(double %i) 384ff62052SZhaoQi ret double %0 394ff62052SZhaoQi} 404ff62052SZhaoQi 414ff62052SZhaoQi;; floorf 424ff62052SZhaoQidefine float @floor_f32(float %i) nounwind { 434ff62052SZhaoQi; NOLSX-LABEL: floor_f32: 444ff62052SZhaoQi; NOLSX: # %bb.0: # %entry 454ff62052SZhaoQi; NOLSX-NEXT: b %plt(floorf) 464ff62052SZhaoQi; 474ff62052SZhaoQi; LSX-LABEL: floor_f32: 484ff62052SZhaoQi; LSX: # %bb.0: # %entry 49*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0 killed $f0 def $vr0 50*92be2cb0SZhaoQi; LSX-NEXT: vreplvei.w $vr0, $vr0, 0 51*92be2cb0SZhaoQi; LSX-NEXT: vfrintrm.s $vr0, $vr0 52*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0 killed $f0 killed $vr0 53*92be2cb0SZhaoQi; LSX-NEXT: ret 544ff62052SZhaoQientry: 554ff62052SZhaoQi %0 = call float @llvm.floor.f32(float %i) 564ff62052SZhaoQi ret float %0 574ff62052SZhaoQi} 584ff62052SZhaoQi 594ff62052SZhaoQi;; floor 604ff62052SZhaoQidefine double @floor_f64(double %i) nounwind { 614ff62052SZhaoQi; NOLSX-LABEL: floor_f64: 624ff62052SZhaoQi; NOLSX: # %bb.0: # %entry 634ff62052SZhaoQi; NOLSX-NEXT: b %plt(floor) 644ff62052SZhaoQi; 654ff62052SZhaoQi; LSX-LABEL: floor_f64: 664ff62052SZhaoQi; LSX: # %bb.0: # %entry 67*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0 68*92be2cb0SZhaoQi; LSX-NEXT: vreplvei.d $vr0, $vr0, 0 69*92be2cb0SZhaoQi; LSX-NEXT: vfrintrm.d $vr0, $vr0 70*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0 71*92be2cb0SZhaoQi; LSX-NEXT: ret 724ff62052SZhaoQientry: 734ff62052SZhaoQi %0 = call double @llvm.floor.f64(double %i) 744ff62052SZhaoQi ret double %0 754ff62052SZhaoQi} 764ff62052SZhaoQi 774ff62052SZhaoQi;; truncf 784ff62052SZhaoQidefine float @trunc_f32(float %i) nounwind { 794ff62052SZhaoQi; NOLSX-LABEL: trunc_f32: 804ff62052SZhaoQi; NOLSX: # %bb.0: # %entry 814ff62052SZhaoQi; NOLSX-NEXT: b %plt(truncf) 824ff62052SZhaoQi; 834ff62052SZhaoQi; LSX-LABEL: trunc_f32: 844ff62052SZhaoQi; LSX: # %bb.0: # %entry 85*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0 killed $f0 def $vr0 86*92be2cb0SZhaoQi; LSX-NEXT: vreplvei.w $vr0, $vr0, 0 87*92be2cb0SZhaoQi; LSX-NEXT: vfrintrz.s $vr0, $vr0 88*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0 killed $f0 killed $vr0 89*92be2cb0SZhaoQi; LSX-NEXT: ret 904ff62052SZhaoQientry: 914ff62052SZhaoQi %0 = call float @llvm.trunc.f32(float %i) 924ff62052SZhaoQi ret float %0 934ff62052SZhaoQi} 944ff62052SZhaoQi 954ff62052SZhaoQi;; trunc 964ff62052SZhaoQidefine double @trunc_f64(double %i) nounwind { 974ff62052SZhaoQi; NOLSX-LABEL: trunc_f64: 984ff62052SZhaoQi; NOLSX: # %bb.0: # %entry 994ff62052SZhaoQi; NOLSX-NEXT: b %plt(trunc) 1004ff62052SZhaoQi; 1014ff62052SZhaoQi; LSX-LABEL: trunc_f64: 1024ff62052SZhaoQi; LSX: # %bb.0: # %entry 103*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0 104*92be2cb0SZhaoQi; LSX-NEXT: vreplvei.d $vr0, $vr0, 0 105*92be2cb0SZhaoQi; LSX-NEXT: vfrintrz.d $vr0, $vr0 106*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0 107*92be2cb0SZhaoQi; LSX-NEXT: ret 1084ff62052SZhaoQientry: 1094ff62052SZhaoQi %0 = call double @llvm.trunc.f64(double %i) 1104ff62052SZhaoQi ret double %0 1114ff62052SZhaoQi} 1124ff62052SZhaoQi 1134ff62052SZhaoQi;; roundevenf 1144ff62052SZhaoQidefine float @roundeven_f32(float %i) nounwind { 1154ff62052SZhaoQi; NOLSX-LABEL: roundeven_f32: 1164ff62052SZhaoQi; NOLSX: # %bb.0: # %entry 1174ff62052SZhaoQi; NOLSX-NEXT: b %plt(roundevenf) 1184ff62052SZhaoQi; 1194ff62052SZhaoQi; LSX-LABEL: roundeven_f32: 1204ff62052SZhaoQi; LSX: # %bb.0: # %entry 121*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0 killed $f0 def $vr0 122*92be2cb0SZhaoQi; LSX-NEXT: vreplvei.w $vr0, $vr0, 0 123*92be2cb0SZhaoQi; LSX-NEXT: vfrintrne.s $vr0, $vr0 124*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0 killed $f0 killed $vr0 125*92be2cb0SZhaoQi; LSX-NEXT: ret 1264ff62052SZhaoQientry: 1274ff62052SZhaoQi %0 = call float @llvm.roundeven.f32(float %i) 1284ff62052SZhaoQi ret float %0 1294ff62052SZhaoQi} 1304ff62052SZhaoQi 1314ff62052SZhaoQi;; roundeven 1324ff62052SZhaoQidefine double @roundeven_f64(double %i) nounwind { 1334ff62052SZhaoQi; NOLSX-LABEL: roundeven_f64: 1344ff62052SZhaoQi; NOLSX: # %bb.0: # %entry 1354ff62052SZhaoQi; NOLSX-NEXT: b %plt(roundeven) 1364ff62052SZhaoQi; 1374ff62052SZhaoQi; LSX-LABEL: roundeven_f64: 1384ff62052SZhaoQi; LSX: # %bb.0: # %entry 139*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0 140*92be2cb0SZhaoQi; LSX-NEXT: vreplvei.d $vr0, $vr0, 0 141*92be2cb0SZhaoQi; LSX-NEXT: vfrintrne.d $vr0, $vr0 142*92be2cb0SZhaoQi; LSX-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0 143*92be2cb0SZhaoQi; LSX-NEXT: ret 1444ff62052SZhaoQientry: 1454ff62052SZhaoQi %0 = call double @llvm.roundeven.f64(double %i) 1464ff62052SZhaoQi ret double %0 1474ff62052SZhaoQi} 1484ff62052SZhaoQi 1494ff62052SZhaoQideclare float @llvm.ceil.f32(float) 1504ff62052SZhaoQideclare double @llvm.ceil.f64(double) 1514ff62052SZhaoQideclare float @llvm.floor.f32(float) 1524ff62052SZhaoQideclare double @llvm.floor.f64(double) 1534ff62052SZhaoQideclare float @llvm.trunc.f32(float) 1544ff62052SZhaoQideclare double @llvm.trunc.f64(double) 1554ff62052SZhaoQideclare float @llvm.roundeven.f32(float) 1564ff62052SZhaoQideclare double @llvm.roundeven.f64(double) 157