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,+lasx < %s | FileCheck %s3; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s4 5;; ceilf6define void @ceil_v8f32(ptr %res, ptr %a0) nounwind {7; CHECK-LABEL: ceil_v8f32:8; CHECK: # %bb.0: # %entry9; CHECK-NEXT: xvld $xr0, $a1, 010; CHECK-NEXT: xvfrintrp.s $xr0, $xr011; CHECK-NEXT: xvst $xr0, $a0, 012; CHECK-NEXT: ret13entry:14 %v0 = load <8 x float>, ptr %a015 %r = call <8 x float> @llvm.ceil.v8f32(<8 x float> %v0)16 store <8 x float> %r, ptr %res17 ret void18}19 20;; ceil21define void @ceil_v4f64(ptr %res, ptr %a0) nounwind {22; CHECK-LABEL: ceil_v4f64:23; CHECK: # %bb.0: # %entry24; CHECK-NEXT: xvld $xr0, $a1, 025; CHECK-NEXT: xvfrintrp.d $xr0, $xr026; CHECK-NEXT: xvst $xr0, $a0, 027; CHECK-NEXT: ret28entry:29 %v0 = load <4 x double>, ptr %a030 %r = call <4 x double> @llvm.ceil.v4f64(<4 x double> %v0)31 store <4 x double> %r, ptr %res32 ret void33}34 35;; floorf36define void @floor_v8f32(ptr %res, ptr %a0) nounwind {37; CHECK-LABEL: floor_v8f32:38; CHECK: # %bb.0: # %entry39; CHECK-NEXT: xvld $xr0, $a1, 040; CHECK-NEXT: xvfrintrm.s $xr0, $xr041; CHECK-NEXT: xvst $xr0, $a0, 042; CHECK-NEXT: ret43entry:44 %v0 = load <8 x float>, ptr %a045 %r = call <8 x float> @llvm.floor.v8f32(<8 x float> %v0)46 store <8 x float> %r, ptr %res47 ret void48}49 50;; floor51define void @floor_v4f64(ptr %res, ptr %a0) nounwind {52; CHECK-LABEL: floor_v4f64:53; CHECK: # %bb.0: # %entry54; CHECK-NEXT: xvld $xr0, $a1, 055; CHECK-NEXT: xvfrintrm.d $xr0, $xr056; CHECK-NEXT: xvst $xr0, $a0, 057; CHECK-NEXT: ret58entry:59 %v0 = load <4 x double>, ptr %a060 %r = call <4 x double> @llvm.floor.v4f64(<4 x double> %v0)61 store <4 x double> %r, ptr %res62 ret void63}64 65;; truncf66define void @trunc_v8f32(ptr %res, ptr %a0) nounwind {67; CHECK-LABEL: trunc_v8f32:68; CHECK: # %bb.0: # %entry69; CHECK-NEXT: xvld $xr0, $a1, 070; CHECK-NEXT: xvfrintrz.s $xr0, $xr071; CHECK-NEXT: xvst $xr0, $a0, 072; CHECK-NEXT: ret73entry:74 %v0 = load <8 x float>, ptr %a075 %r = call <8 x float> @llvm.trunc.v8f32(<8 x float> %v0)76 store <8 x float> %r, ptr %res77 ret void78}79 80;; trunc81define void @trunc_v4f64(ptr %res, ptr %a0) nounwind {82; CHECK-LABEL: trunc_v4f64:83; CHECK: # %bb.0: # %entry84; CHECK-NEXT: xvld $xr0, $a1, 085; CHECK-NEXT: xvfrintrz.d $xr0, $xr086; CHECK-NEXT: xvst $xr0, $a0, 087; CHECK-NEXT: ret88entry:89 %v0 = load <4 x double>, ptr %a090 %r = call <4 x double> @llvm.trunc.v4f64(<4 x double> %v0)91 store <4 x double> %r, ptr %res92 ret void93}94 95;; roundevenf96define void @roundeven_v8f32(ptr %res, ptr %a0) nounwind {97; CHECK-LABEL: roundeven_v8f32:98; CHECK: # %bb.0: # %entry99; CHECK-NEXT: xvld $xr0, $a1, 0100; CHECK-NEXT: xvfrintrne.s $xr0, $xr0101; CHECK-NEXT: xvst $xr0, $a0, 0102; CHECK-NEXT: ret103entry:104 %v0 = load <8 x float>, ptr %a0105 %r = call <8 x float> @llvm.roundeven.v8f32(<8 x float> %v0)106 store <8 x float> %r, ptr %res107 ret void108}109 110;; roundeven111define void @roundeven_v4f64(ptr %res, ptr %a0) nounwind {112; CHECK-LABEL: roundeven_v4f64:113; CHECK: # %bb.0: # %entry114; CHECK-NEXT: xvld $xr0, $a1, 0115; CHECK-NEXT: xvfrintrne.d $xr0, $xr0116; CHECK-NEXT: xvst $xr0, $a0, 0117; CHECK-NEXT: ret118entry:119 %v0 = load <4 x double>, ptr %a0120 %r = call <4 x double> @llvm.roundeven.v4f64(<4 x double> %v0)121 store <4 x double> %r, ptr %res122 ret void123}124 125declare <8 x float> @llvm.ceil.v8f32(<8 x float>)126declare <4 x double> @llvm.ceil.v4f64(<4 x double>)127declare <8 x float> @llvm.floor.v8f32(<8 x float>)128declare <4 x double> @llvm.floor.v4f64(<4 x double>)129declare <8 x float> @llvm.trunc.v8f32(<8 x float>)130declare <4 x double> @llvm.trunc.v4f64(<4 x double>)131declare <8 x float> @llvm.roundeven.v8f32(<8 x float>)132declare <4 x double> @llvm.roundeven.v4f64(<4 x double>)133