81 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx,-frecipe < %s | FileCheck %s --check-prefixes=FAULT,FAULT-LA323; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx,+frecipe < %s | FileCheck %s4; RUN: llc --mtriple=loongarch64 --mattr=+lsx,-frecipe < %s | FileCheck %s --check-prefixes=FAULT,FAULT-LA645; RUN: llc --mtriple=loongarch64 --mattr=+lsx,+frecipe < %s | FileCheck %s6 7;; 1.0 / (fsqrt vec)8define void @one_div_sqrt_v4f32(ptr %res, ptr %a0) nounwind {9; FAULT-LABEL: one_div_sqrt_v4f32:10; FAULT: # %bb.0: # %entry11; FAULT-NEXT: vld $vr0, $a1, 012; FAULT-NEXT: vfrsqrt.s $vr0, $vr013; FAULT-NEXT: vst $vr0, $a0, 014; FAULT-NEXT: ret15;16; CHECK-LABEL: one_div_sqrt_v4f32:17; CHECK: # %bb.0: # %entry18; CHECK-NEXT: vld $vr0, $a1, 019; CHECK-NEXT: vfrsqrte.s $vr1, $vr020; CHECK-NEXT: vfmul.s $vr1, $vr0, $vr121; CHECK-NEXT: vfmul.s $vr0, $vr0, $vr122; CHECK-NEXT: vldi $vr2, -140023; CHECK-NEXT: vfmadd.s $vr0, $vr0, $vr1, $vr224; CHECK-NEXT: vldi $vr2, -313725; CHECK-NEXT: vfmul.s $vr1, $vr1, $vr226; CHECK-NEXT: vfmul.s $vr0, $vr1, $vr027; CHECK-NEXT: vst $vr0, $a0, 028; CHECK-NEXT: ret29entry:30 %v0 = load <4 x float>, ptr %a0, align 1631 %sqrt = call fast <4 x float> @llvm.sqrt.v4f32 (<4 x float> %v0)32 %div = fdiv fast <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, %sqrt33 store <4 x float> %div, ptr %res, align 1634 ret void35}36 37define void @one_div_sqrt_v2f64(ptr %res, ptr %a0) nounwind {38; FAULT-LA32-LABEL: one_div_sqrt_v2f64:39; FAULT-LA32: # %bb.0: # %entry40; FAULT-LA32-NEXT: vld $vr0, $a1, 041; FAULT-LA32-NEXT: vfsqrt.d $vr0, $vr042; FAULT-LA32-NEXT: vldi $vr1, -91243; FAULT-LA32-NEXT: vfdiv.d $vr0, $vr1, $vr044; FAULT-LA32-NEXT: vst $vr0, $a0, 045; FAULT-LA32-NEXT: ret46;47; CHECK-LABEL: one_div_sqrt_v2f64:48; CHECK: # %bb.0: # %entry49; CHECK-NEXT: vld $vr0, $a1, 050; CHECK-NEXT: vfrsqrte.d $vr1, $vr051; CHECK-NEXT: vfmul.d $vr1, $vr0, $vr152; CHECK-NEXT: vfmul.d $vr2, $vr0, $vr153; CHECK-NEXT: vldi $vr3, -88854; CHECK-NEXT: vfmadd.d $vr2, $vr2, $vr1, $vr355; CHECK-NEXT: vldi $vr4, -80056; CHECK-NEXT: vfmul.d $vr1, $vr1, $vr457; CHECK-NEXT: vfmul.d $vr1, $vr1, $vr258; CHECK-NEXT: vfmul.d $vr0, $vr0, $vr159; CHECK-NEXT: vfmadd.d $vr0, $vr0, $vr1, $vr360; CHECK-NEXT: vfmul.d $vr1, $vr1, $vr461; CHECK-NEXT: vfmul.d $vr0, $vr1, $vr062; CHECK-NEXT: vst $vr0, $a0, 063; CHECK-NEXT: ret64;65; FAULT-LA64-LABEL: one_div_sqrt_v2f64:66; FAULT-LA64: # %bb.0: # %entry67; FAULT-LA64-NEXT: vld $vr0, $a1, 068; FAULT-LA64-NEXT: vfrsqrt.d $vr0, $vr069; FAULT-LA64-NEXT: vst $vr0, $a0, 070; FAULT-LA64-NEXT: ret71entry:72 %v0 = load <2 x double>, ptr %a0, align 1673 %sqrt = call fast <2 x double> @llvm.sqrt.v2f64 (<2 x double> %v0)74 %div = fdiv fast <2 x double> <double 1.0, double 1.0>, %sqrt75 store <2 x double> %div, ptr %res, align 1676 ret void77}78 79declare <4 x float> @llvm.sqrt.v4f32(<4 x float>)80declare <2 x double> @llvm.sqrt.v2f64(<2 x double>)81