133 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx < %s | FileCheck %s3; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s4 5;; ceilf6define void @ceil_v4f32(ptr %res, ptr %a0) nounwind {7; CHECK-LABEL: ceil_v4f32:8; CHECK: # %bb.0: # %entry9; CHECK-NEXT: vld $vr0, $a1, 010; CHECK-NEXT: vfrintrp.s $vr0, $vr011; CHECK-NEXT: vst $vr0, $a0, 012; CHECK-NEXT: ret13entry:14 %v0 = load <4 x float>, ptr %a015 %r = call <4 x float> @llvm.ceil.v4f32(<4 x float> %v0)16 store <4 x float> %r, ptr %res17 ret void18}19 20;; ceil21define void @ceil_v2f64(ptr %res, ptr %a0) nounwind {22; CHECK-LABEL: ceil_v2f64:23; CHECK: # %bb.0: # %entry24; CHECK-NEXT: vld $vr0, $a1, 025; CHECK-NEXT: vfrintrp.d $vr0, $vr026; CHECK-NEXT: vst $vr0, $a0, 027; CHECK-NEXT: ret28entry:29 %v0 = load <2 x double>, ptr %a030 %r = call <2 x double> @llvm.ceil.v2f64(<2 x double> %v0)31 store <2 x double> %r, ptr %res32 ret void33}34 35;; floorf36define void @floor_v4f32(ptr %res, ptr %a0) nounwind {37; CHECK-LABEL: floor_v4f32:38; CHECK: # %bb.0: # %entry39; CHECK-NEXT: vld $vr0, $a1, 040; CHECK-NEXT: vfrintrm.s $vr0, $vr041; CHECK-NEXT: vst $vr0, $a0, 042; CHECK-NEXT: ret43entry:44 %v0 = load <4 x float>, ptr %a045 %r = call <4 x float> @llvm.floor.v4f32(<4 x float> %v0)46 store <4 x float> %r, ptr %res47 ret void48}49 50;; floor51define void @floor_v2f64(ptr %res, ptr %a0) nounwind {52; CHECK-LABEL: floor_v2f64:53; CHECK: # %bb.0: # %entry54; CHECK-NEXT: vld $vr0, $a1, 055; CHECK-NEXT: vfrintrm.d $vr0, $vr056; CHECK-NEXT: vst $vr0, $a0, 057; CHECK-NEXT: ret58entry:59 %v0 = load <2 x double>, ptr %a060 %r = call <2 x double> @llvm.floor.v2f64(<2 x double> %v0)61 store <2 x double> %r, ptr %res62 ret void63}64 65;; truncf66define void @trunc_v4f32(ptr %res, ptr %a0) nounwind {67; CHECK-LABEL: trunc_v4f32:68; CHECK: # %bb.0: # %entry69; CHECK-NEXT: vld $vr0, $a1, 070; CHECK-NEXT: vfrintrz.s $vr0, $vr071; CHECK-NEXT: vst $vr0, $a0, 072; CHECK-NEXT: ret73entry:74 %v0 = load <4 x float>, ptr %a075 %r = call <4 x float> @llvm.trunc.v4f32(<4 x float> %v0)76 store <4 x float> %r, ptr %res77 ret void78}79 80;; trunc81define void @trunc_v2f64(ptr %res, ptr %a0) nounwind {82; CHECK-LABEL: trunc_v2f64:83; CHECK: # %bb.0: # %entry84; CHECK-NEXT: vld $vr0, $a1, 085; CHECK-NEXT: vfrintrz.d $vr0, $vr086; CHECK-NEXT: vst $vr0, $a0, 087; CHECK-NEXT: ret88entry:89 %v0 = load <2 x double>, ptr %a090 %r = call <2 x double> @llvm.trunc.v2f64(<2 x double> %v0)91 store <2 x double> %r, ptr %res92 ret void93}94 95;; roundevenf96define void @roundeven_v4f32(ptr %res, ptr %a0) nounwind {97; CHECK-LABEL: roundeven_v4f32:98; CHECK: # %bb.0: # %entry99; CHECK-NEXT: vld $vr0, $a1, 0100; CHECK-NEXT: vfrintrne.s $vr0, $vr0101; CHECK-NEXT: vst $vr0, $a0, 0102; CHECK-NEXT: ret103entry:104 %v0 = load <4 x float>, ptr %a0105 %r = call <4 x float> @llvm.roundeven.v4f32(<4 x float> %v0)106 store <4 x float> %r, ptr %res107 ret void108}109 110;; roundeven111define void @roundeven_v2f64(ptr %res, ptr %a0) nounwind {112; CHECK-LABEL: roundeven_v2f64:113; CHECK: # %bb.0: # %entry114; CHECK-NEXT: vld $vr0, $a1, 0115; CHECK-NEXT: vfrintrne.d $vr0, $vr0116; CHECK-NEXT: vst $vr0, $a0, 0117; CHECK-NEXT: ret118entry:119 %v0 = load <2 x double>, ptr %a0120 %r = call <2 x double> @llvm.roundeven.v2f64(<2 x double> %v0)121 store <2 x double> %r, ptr %res122 ret void123}124 125declare <4 x float> @llvm.ceil.v4f32(<4 x float>)126declare <2 x double> @llvm.ceil.v2f64(<2 x double>)127declare <4 x float> @llvm.floor.v4f32(<4 x float>)128declare <2 x double> @llvm.floor.v2f64(<2 x double>)129declare <4 x float> @llvm.trunc.v4f32(<4 x float>)130declare <2 x double> @llvm.trunc.v2f64(<2 x double>)131declare <4 x float> @llvm.roundeven.v4f32(<4 x float>)132declare <2 x double> @llvm.roundeven.v2f64(<2 x double>)133