xref: /llvm-project/llvm/test/CodeGen/LoongArch/fp-rounding.ll (revision 92be2cb08632ea38f6fbc41adfeb475ba27447dd)
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