165 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc --mtriple=loongarch64 --mattr=-lsx < %s | FileCheck %s --check-prefix=NOLSX3; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s --check-prefix=LSX4 5;; ceilf6define float @ceil_f32(float %i) nounwind {7; NOLSX-LABEL: ceil_f32:8; NOLSX: # %bb.0: # %entry9; NOLSX-NEXT: pcaddu18i $t8, %call36(ceilf)10; NOLSX-NEXT: jr $t811;12; LSX-LABEL: ceil_f32:13; LSX: # %bb.0: # %entry14; LSX-NEXT: # kill: def $f0 killed $f0 def $vr015; LSX-NEXT: vreplvei.w $vr0, $vr0, 016; LSX-NEXT: vfrintrp.s $vr0, $vr017; LSX-NEXT: # kill: def $f0 killed $f0 killed $vr018; LSX-NEXT: ret19entry:20 %0 = call float @llvm.ceil.f32(float %i)21 ret float %022}23 24;; ceil25define double @ceil_f64(double %i) nounwind {26; NOLSX-LABEL: ceil_f64:27; NOLSX: # %bb.0: # %entry28; NOLSX-NEXT: pcaddu18i $t8, %call36(ceil)29; NOLSX-NEXT: jr $t830;31; LSX-LABEL: ceil_f64:32; LSX: # %bb.0: # %entry33; LSX-NEXT: # kill: def $f0_64 killed $f0_64 def $vr034; LSX-NEXT: vreplvei.d $vr0, $vr0, 035; LSX-NEXT: vfrintrp.d $vr0, $vr036; LSX-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr037; LSX-NEXT: ret38entry:39 %0 = call double @llvm.ceil.f64(double %i)40 ret double %041}42 43;; floorf44define float @floor_f32(float %i) nounwind {45; NOLSX-LABEL: floor_f32:46; NOLSX: # %bb.0: # %entry47; NOLSX-NEXT: pcaddu18i $t8, %call36(floorf)48; NOLSX-NEXT: jr $t849;50; LSX-LABEL: floor_f32:51; LSX: # %bb.0: # %entry52; LSX-NEXT: # kill: def $f0 killed $f0 def $vr053; LSX-NEXT: vreplvei.w $vr0, $vr0, 054; LSX-NEXT: vfrintrm.s $vr0, $vr055; LSX-NEXT: # kill: def $f0 killed $f0 killed $vr056; LSX-NEXT: ret57entry:58 %0 = call float @llvm.floor.f32(float %i)59 ret float %060}61 62;; floor63define double @floor_f64(double %i) nounwind {64; NOLSX-LABEL: floor_f64:65; NOLSX: # %bb.0: # %entry66; NOLSX-NEXT: pcaddu18i $t8, %call36(floor)67; NOLSX-NEXT: jr $t868;69; LSX-LABEL: floor_f64:70; LSX: # %bb.0: # %entry71; LSX-NEXT: # kill: def $f0_64 killed $f0_64 def $vr072; LSX-NEXT: vreplvei.d $vr0, $vr0, 073; LSX-NEXT: vfrintrm.d $vr0, $vr074; LSX-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr075; LSX-NEXT: ret76entry:77 %0 = call double @llvm.floor.f64(double %i)78 ret double %079}80 81;; truncf82define float @trunc_f32(float %i) nounwind {83; NOLSX-LABEL: trunc_f32:84; NOLSX: # %bb.0: # %entry85; NOLSX-NEXT: pcaddu18i $t8, %call36(truncf)86; NOLSX-NEXT: jr $t887;88; LSX-LABEL: trunc_f32:89; LSX: # %bb.0: # %entry90; LSX-NEXT: # kill: def $f0 killed $f0 def $vr091; LSX-NEXT: vreplvei.w $vr0, $vr0, 092; LSX-NEXT: vfrintrz.s $vr0, $vr093; LSX-NEXT: # kill: def $f0 killed $f0 killed $vr094; LSX-NEXT: ret95entry:96 %0 = call float @llvm.trunc.f32(float %i)97 ret float %098}99 100;; trunc101define double @trunc_f64(double %i) nounwind {102; NOLSX-LABEL: trunc_f64:103; NOLSX: # %bb.0: # %entry104; NOLSX-NEXT: pcaddu18i $t8, %call36(trunc)105; NOLSX-NEXT: jr $t8106;107; LSX-LABEL: trunc_f64:108; LSX: # %bb.0: # %entry109; LSX-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0110; LSX-NEXT: vreplvei.d $vr0, $vr0, 0111; LSX-NEXT: vfrintrz.d $vr0, $vr0112; LSX-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0113; LSX-NEXT: ret114entry:115 %0 = call double @llvm.trunc.f64(double %i)116 ret double %0117}118 119;; roundevenf120define float @roundeven_f32(float %i) nounwind {121; NOLSX-LABEL: roundeven_f32:122; NOLSX: # %bb.0: # %entry123; NOLSX-NEXT: pcaddu18i $t8, %call36(roundevenf)124; NOLSX-NEXT: jr $t8125;126; LSX-LABEL: roundeven_f32:127; LSX: # %bb.0: # %entry128; LSX-NEXT: # kill: def $f0 killed $f0 def $vr0129; LSX-NEXT: vreplvei.w $vr0, $vr0, 0130; LSX-NEXT: vfrintrne.s $vr0, $vr0131; LSX-NEXT: # kill: def $f0 killed $f0 killed $vr0132; LSX-NEXT: ret133entry:134 %0 = call float @llvm.roundeven.f32(float %i)135 ret float %0136}137 138;; roundeven139define double @roundeven_f64(double %i) nounwind {140; NOLSX-LABEL: roundeven_f64:141; NOLSX: # %bb.0: # %entry142; NOLSX-NEXT: pcaddu18i $t8, %call36(roundeven)143; NOLSX-NEXT: jr $t8144;145; LSX-LABEL: roundeven_f64:146; LSX: # %bb.0: # %entry147; LSX-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0148; LSX-NEXT: vreplvei.d $vr0, $vr0, 0149; LSX-NEXT: vfrintrne.d $vr0, $vr0150; LSX-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0151; LSX-NEXT: ret152entry:153 %0 = call double @llvm.roundeven.f64(double %i)154 ret double %0155}156 157declare float @llvm.ceil.f32(float)158declare double @llvm.ceil.f64(double)159declare float @llvm.floor.f32(float)160declare double @llvm.floor.f64(double)161declare float @llvm.trunc.f32(float)162declare double @llvm.trunc.f64(double)163declare float @llvm.roundeven.f32(float)164declare double @llvm.roundeven.f64(double)165