236 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx,-frecipe < %s | FileCheck %s --check-prefix=FAULT-LA323; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx,+frecipe < %s | FileCheck %s --check-prefix=LA324; RUN: llc --mtriple=loongarch64 --mattr=+lasx,-frecipe < %s | FileCheck %s --check-prefix=FAULT-LA645; RUN: llc --mtriple=loongarch64 --mattr=+lasx,+frecipe < %s | FileCheck %s --check-prefix=LA646 7;; 1.0 / (fsqrt vec)8define void @one_div_sqrt_v8f32(ptr %res, ptr %a0) nounwind {9; FAULT-LA32-LABEL: one_div_sqrt_v8f32:10; FAULT-LA32: # %bb.0: # %entry11; FAULT-LA32-NEXT: addi.w $sp, $sp, -12812; FAULT-LA32-NEXT: st.w $ra, $sp, 124 # 4-byte Folded Spill13; FAULT-LA32-NEXT: st.w $fp, $sp, 120 # 4-byte Folded Spill14; FAULT-LA32-NEXT: addi.w $fp, $sp, 12815; FAULT-LA32-NEXT: bstrins.w $sp, $zero, 4, 016; FAULT-LA32-NEXT: vld $vr0, $a1, 1617; FAULT-LA32-NEXT: vst $vr0, $sp, 4818; FAULT-LA32-NEXT: ld.w $a2, $a1, 1219; FAULT-LA32-NEXT: st.w $a2, $sp, 4420; FAULT-LA32-NEXT: ld.w $a2, $a1, 821; FAULT-LA32-NEXT: st.w $a2, $sp, 4022; FAULT-LA32-NEXT: ld.w $a2, $a1, 423; FAULT-LA32-NEXT: st.w $a2, $sp, 3624; FAULT-LA32-NEXT: ld.w $a1, $a1, 025; FAULT-LA32-NEXT: st.w $a1, $sp, 3226; FAULT-LA32-NEXT: xvld $xr0, $sp, 3227; FAULT-LA32-NEXT: xvfrsqrt.s $xr0, $xr028; FAULT-LA32-NEXT: xvst $xr0, $sp, 6429; FAULT-LA32-NEXT: vld $vr0, $sp, 8030; FAULT-LA32-NEXT: vst $vr0, $a0, 1631; FAULT-LA32-NEXT: ld.w $a1, $sp, 7632; FAULT-LA32-NEXT: st.w $a1, $a0, 1233; FAULT-LA32-NEXT: ld.w $a1, $sp, 7234; FAULT-LA32-NEXT: st.w $a1, $a0, 835; FAULT-LA32-NEXT: ld.w $a1, $sp, 6836; FAULT-LA32-NEXT: st.w $a1, $a0, 437; FAULT-LA32-NEXT: ld.w $a1, $sp, 6438; FAULT-LA32-NEXT: st.w $a1, $a0, 039; FAULT-LA32-NEXT: addi.w $sp, $fp, -12840; FAULT-LA32-NEXT: ld.w $fp, $sp, 120 # 4-byte Folded Reload41; FAULT-LA32-NEXT: ld.w $ra, $sp, 124 # 4-byte Folded Reload42; FAULT-LA32-NEXT: addi.w $sp, $sp, 12843; FAULT-LA32-NEXT: ret44;45; LA32-LABEL: one_div_sqrt_v8f32:46; LA32: # %bb.0: # %entry47; LA32-NEXT: addi.w $sp, $sp, -12848; LA32-NEXT: st.w $ra, $sp, 124 # 4-byte Folded Spill49; LA32-NEXT: st.w $fp, $sp, 120 # 4-byte Folded Spill50; LA32-NEXT: addi.w $fp, $sp, 12851; LA32-NEXT: bstrins.w $sp, $zero, 4, 052; LA32-NEXT: vld $vr0, $a1, 1653; LA32-NEXT: vst $vr0, $sp, 4854; LA32-NEXT: ld.w $a2, $a1, 1255; LA32-NEXT: st.w $a2, $sp, 4456; LA32-NEXT: ld.w $a2, $a1, 857; LA32-NEXT: st.w $a2, $sp, 4058; LA32-NEXT: ld.w $a2, $a1, 459; LA32-NEXT: st.w $a2, $sp, 3660; LA32-NEXT: ld.w $a1, $a1, 061; LA32-NEXT: st.w $a1, $sp, 3262; LA32-NEXT: xvld $xr0, $sp, 3263; LA32-NEXT: xvfrsqrte.s $xr1, $xr064; LA32-NEXT: xvfmul.s $xr1, $xr0, $xr165; LA32-NEXT: xvfmul.s $xr0, $xr0, $xr166; LA32-NEXT: xvldi $xr2, -140067; LA32-NEXT: xvfmadd.s $xr0, $xr0, $xr1, $xr268; LA32-NEXT: xvldi $xr2, -313769; LA32-NEXT: xvfmul.s $xr1, $xr1, $xr270; LA32-NEXT: xvfmul.s $xr0, $xr1, $xr071; LA32-NEXT: xvst $xr0, $sp, 6472; LA32-NEXT: vld $vr0, $sp, 8073; LA32-NEXT: vst $vr0, $a0, 1674; LA32-NEXT: ld.w $a1, $sp, 7675; LA32-NEXT: st.w $a1, $a0, 1276; LA32-NEXT: ld.w $a1, $sp, 7277; LA32-NEXT: st.w $a1, $a0, 878; LA32-NEXT: ld.w $a1, $sp, 6879; LA32-NEXT: st.w $a1, $a0, 480; LA32-NEXT: ld.w $a1, $sp, 6481; LA32-NEXT: st.w $a1, $a0, 082; LA32-NEXT: addi.w $sp, $fp, -12883; LA32-NEXT: ld.w $fp, $sp, 120 # 4-byte Folded Reload84; LA32-NEXT: ld.w $ra, $sp, 124 # 4-byte Folded Reload85; LA32-NEXT: addi.w $sp, $sp, 12886; LA32-NEXT: ret87;88; FAULT-LA64-LABEL: one_div_sqrt_v8f32:89; FAULT-LA64: # %bb.0: # %entry90; FAULT-LA64-NEXT: xvld $xr0, $a1, 091; FAULT-LA64-NEXT: xvfrsqrt.s $xr0, $xr092; FAULT-LA64-NEXT: xvst $xr0, $a0, 093; FAULT-LA64-NEXT: ret94;95; LA64-LABEL: one_div_sqrt_v8f32:96; LA64: # %bb.0: # %entry97; LA64-NEXT: xvld $xr0, $a1, 098; LA64-NEXT: xvfrsqrte.s $xr1, $xr099; LA64-NEXT: xvfmul.s $xr1, $xr0, $xr1100; LA64-NEXT: xvfmul.s $xr0, $xr0, $xr1101; LA64-NEXT: xvldi $xr2, -1400102; LA64-NEXT: xvfmadd.s $xr0, $xr0, $xr1, $xr2103; LA64-NEXT: xvldi $xr2, -3137104; LA64-NEXT: xvfmul.s $xr1, $xr1, $xr2105; LA64-NEXT: xvfmul.s $xr0, $xr1, $xr0106; LA64-NEXT: xvst $xr0, $a0, 0107; LA64-NEXT: ret108entry:109 %v0 = load <8 x float>, ptr %a0, align 16110 %sqrt = call fast <8 x float> @llvm.sqrt.v8f32 (<8 x float> %v0)111 %div = fdiv fast <8 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, %sqrt112 store <8 x float> %div, ptr %res, align 16113 ret void114}115 116define void @one_div_sqrt_v4f64(ptr %res, ptr %a0) nounwind {117; FAULT-LA32-LABEL: one_div_sqrt_v4f64:118; FAULT-LA32: # %bb.0: # %entry119; FAULT-LA32-NEXT: addi.w $sp, $sp, -128120; FAULT-LA32-NEXT: st.w $ra, $sp, 124 # 4-byte Folded Spill121; FAULT-LA32-NEXT: st.w $fp, $sp, 120 # 4-byte Folded Spill122; FAULT-LA32-NEXT: addi.w $fp, $sp, 128123; FAULT-LA32-NEXT: bstrins.w $sp, $zero, 4, 0124; FAULT-LA32-NEXT: vld $vr0, $a1, 16125; FAULT-LA32-NEXT: vst $vr0, $sp, 48126; FAULT-LA32-NEXT: ld.w $a2, $a1, 12127; FAULT-LA32-NEXT: st.w $a2, $sp, 44128; FAULT-LA32-NEXT: ld.w $a2, $a1, 8129; FAULT-LA32-NEXT: st.w $a2, $sp, 40130; FAULT-LA32-NEXT: ld.w $a2, $a1, 4131; FAULT-LA32-NEXT: st.w $a2, $sp, 36132; FAULT-LA32-NEXT: ld.w $a1, $a1, 0133; FAULT-LA32-NEXT: st.w $a1, $sp, 32134; FAULT-LA32-NEXT: xvld $xr0, $sp, 32135; FAULT-LA32-NEXT: xvfsqrt.d $xr0, $xr0136; FAULT-LA32-NEXT: xvldi $xr1, -912137; FAULT-LA32-NEXT: xvfdiv.d $xr0, $xr1, $xr0138; FAULT-LA32-NEXT: xvst $xr0, $sp, 64139; FAULT-LA32-NEXT: vld $vr0, $sp, 80140; FAULT-LA32-NEXT: vst $vr0, $a0, 16141; FAULT-LA32-NEXT: ld.w $a1, $sp, 76142; FAULT-LA32-NEXT: st.w $a1, $a0, 12143; FAULT-LA32-NEXT: ld.w $a1, $sp, 72144; FAULT-LA32-NEXT: st.w $a1, $a0, 8145; FAULT-LA32-NEXT: ld.w $a1, $sp, 68146; FAULT-LA32-NEXT: st.w $a1, $a0, 4147; FAULT-LA32-NEXT: ld.w $a1, $sp, 64148; FAULT-LA32-NEXT: st.w $a1, $a0, 0149; FAULT-LA32-NEXT: addi.w $sp, $fp, -128150; FAULT-LA32-NEXT: ld.w $fp, $sp, 120 # 4-byte Folded Reload151; FAULT-LA32-NEXT: ld.w $ra, $sp, 124 # 4-byte Folded Reload152; FAULT-LA32-NEXT: addi.w $sp, $sp, 128153; FAULT-LA32-NEXT: ret154;155; LA32-LABEL: one_div_sqrt_v4f64:156; LA32: # %bb.0: # %entry157; LA32-NEXT: addi.w $sp, $sp, -128158; LA32-NEXT: st.w $ra, $sp, 124 # 4-byte Folded Spill159; LA32-NEXT: st.w $fp, $sp, 120 # 4-byte Folded Spill160; LA32-NEXT: addi.w $fp, $sp, 128161; LA32-NEXT: bstrins.w $sp, $zero, 4, 0162; LA32-NEXT: vld $vr0, $a1, 16163; LA32-NEXT: vst $vr0, $sp, 48164; LA32-NEXT: ld.w $a2, $a1, 12165; LA32-NEXT: st.w $a2, $sp, 44166; LA32-NEXT: ld.w $a2, $a1, 8167; LA32-NEXT: st.w $a2, $sp, 40168; LA32-NEXT: ld.w $a2, $a1, 4169; LA32-NEXT: st.w $a2, $sp, 36170; LA32-NEXT: ld.w $a1, $a1, 0171; LA32-NEXT: st.w $a1, $sp, 32172; LA32-NEXT: xvld $xr0, $sp, 32173; LA32-NEXT: xvfrsqrte.d $xr1, $xr0174; LA32-NEXT: xvfmul.d $xr1, $xr0, $xr1175; LA32-NEXT: xvfmul.d $xr2, $xr0, $xr1176; LA32-NEXT: xvldi $xr3, -888177; LA32-NEXT: xvfmadd.d $xr2, $xr2, $xr1, $xr3178; LA32-NEXT: xvldi $xr4, -800179; LA32-NEXT: xvfmul.d $xr1, $xr1, $xr4180; LA32-NEXT: xvfmul.d $xr1, $xr1, $xr2181; LA32-NEXT: xvfmul.d $xr0, $xr0, $xr1182; LA32-NEXT: xvfmadd.d $xr0, $xr0, $xr1, $xr3183; LA32-NEXT: xvfmul.d $xr1, $xr1, $xr4184; LA32-NEXT: xvfmul.d $xr0, $xr1, $xr0185; LA32-NEXT: xvst $xr0, $sp, 64186; LA32-NEXT: vld $vr0, $sp, 80187; LA32-NEXT: vst $vr0, $a0, 16188; LA32-NEXT: ld.w $a1, $sp, 76189; LA32-NEXT: st.w $a1, $a0, 12190; LA32-NEXT: ld.w $a1, $sp, 72191; LA32-NEXT: st.w $a1, $a0, 8192; LA32-NEXT: ld.w $a1, $sp, 68193; LA32-NEXT: st.w $a1, $a0, 4194; LA32-NEXT: ld.w $a1, $sp, 64195; LA32-NEXT: st.w $a1, $a0, 0196; LA32-NEXT: addi.w $sp, $fp, -128197; LA32-NEXT: ld.w $fp, $sp, 120 # 4-byte Folded Reload198; LA32-NEXT: ld.w $ra, $sp, 124 # 4-byte Folded Reload199; LA32-NEXT: addi.w $sp, $sp, 128200; LA32-NEXT: ret201;202; FAULT-LA64-LABEL: one_div_sqrt_v4f64:203; FAULT-LA64: # %bb.0: # %entry204; FAULT-LA64-NEXT: xvld $xr0, $a1, 0205; FAULT-LA64-NEXT: xvfrsqrt.d $xr0, $xr0206; FAULT-LA64-NEXT: xvst $xr0, $a0, 0207; FAULT-LA64-NEXT: ret208;209; LA64-LABEL: one_div_sqrt_v4f64:210; LA64: # %bb.0: # %entry211; LA64-NEXT: xvld $xr0, $a1, 0212; LA64-NEXT: xvfrsqrte.d $xr1, $xr0213; LA64-NEXT: xvfmul.d $xr1, $xr0, $xr1214; LA64-NEXT: xvfmul.d $xr2, $xr0, $xr1215; LA64-NEXT: xvldi $xr3, -888216; LA64-NEXT: xvfmadd.d $xr2, $xr2, $xr1, $xr3217; LA64-NEXT: xvldi $xr4, -800218; LA64-NEXT: xvfmul.d $xr1, $xr1, $xr4219; LA64-NEXT: xvfmul.d $xr1, $xr1, $xr2220; LA64-NEXT: xvfmul.d $xr0, $xr0, $xr1221; LA64-NEXT: xvfmadd.d $xr0, $xr0, $xr1, $xr3222; LA64-NEXT: xvfmul.d $xr1, $xr1, $xr4223; LA64-NEXT: xvfmul.d $xr0, $xr1, $xr0224; LA64-NEXT: xvst $xr0, $a0, 0225; LA64-NEXT: ret226entry:227 %v0 = load <4 x double>, ptr %a0, align 16228 %sqrt = call fast <4 x double> @llvm.sqrt.v4f64 (<4 x double> %v0)229 %div = fdiv fast <4 x double> <double 1.0, double 1.0, double 1.0, double 1.0>, %sqrt230 store <4 x double> %div, ptr %res, align 16231 ret void232}233 234declare <8 x float> @llvm.sqrt.v8f32(<8 x float>)235declare <4 x double> @llvm.sqrt.v4f64(<4 x double>)236