brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.3 KiB · 9ae651d Raw
213 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s | FileCheck %s --check-prefix=LA323; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s --check-prefix=LA644 5;; fsqrt6define void @sqrt_v8f32(ptr %res, ptr %a0) nounwind {7; LA32-LABEL: sqrt_v8f32:8; LA32:       # %bb.0: # %entry9; LA32-NEXT:    addi.w $sp, $sp, -12810; LA32-NEXT:    st.w $ra, $sp, 124 # 4-byte Folded Spill11; LA32-NEXT:    st.w $fp, $sp, 120 # 4-byte Folded Spill12; LA32-NEXT:    addi.w $fp, $sp, 12813; LA32-NEXT:    bstrins.w $sp, $zero, 4, 014; LA32-NEXT:    vld $vr0, $a1, 1615; LA32-NEXT:    vst $vr0, $sp, 4816; LA32-NEXT:    ld.w $a2, $a1, 1217; LA32-NEXT:    st.w $a2, $sp, 4418; LA32-NEXT:    ld.w $a2, $a1, 819; LA32-NEXT:    st.w $a2, $sp, 4020; LA32-NEXT:    ld.w $a2, $a1, 421; LA32-NEXT:    st.w $a2, $sp, 3622; LA32-NEXT:    ld.w $a1, $a1, 023; LA32-NEXT:    st.w $a1, $sp, 3224; LA32-NEXT:    xvld $xr0, $sp, 3225; LA32-NEXT:    xvfsqrt.s $xr0, $xr026; LA32-NEXT:    xvst $xr0, $sp, 6427; LA32-NEXT:    vld $vr0, $sp, 8028; LA32-NEXT:    vst $vr0, $a0, 1629; LA32-NEXT:    ld.w $a1, $sp, 7630; LA32-NEXT:    st.w $a1, $a0, 1231; LA32-NEXT:    ld.w $a1, $sp, 7232; LA32-NEXT:    st.w $a1, $a0, 833; LA32-NEXT:    ld.w $a1, $sp, 6834; LA32-NEXT:    st.w $a1, $a0, 435; LA32-NEXT:    ld.w $a1, $sp, 6436; LA32-NEXT:    st.w $a1, $a0, 037; LA32-NEXT:    addi.w $sp, $fp, -12838; LA32-NEXT:    ld.w $fp, $sp, 120 # 4-byte Folded Reload39; LA32-NEXT:    ld.w $ra, $sp, 124 # 4-byte Folded Reload40; LA32-NEXT:    addi.w $sp, $sp, 12841; LA32-NEXT:    ret42;43; LA64-LABEL: sqrt_v8f32:44; LA64:       # %bb.0: # %entry45; LA64-NEXT:    xvld $xr0, $a1, 046; LA64-NEXT:    xvfsqrt.s $xr0, $xr047; LA64-NEXT:    xvst $xr0, $a0, 048; LA64-NEXT:    ret49entry:50  %v0 = load <8 x float>, ptr %a0, align 1651  %sqrt = call <8 x float> @llvm.sqrt.v8f32 (<8 x float> %v0)52  store <8 x float> %sqrt, ptr %res, align 1653  ret void54}55 56define void @sqrt_v4f64(ptr %res, ptr %a0) nounwind {57; LA32-LABEL: sqrt_v4f64:58; LA32:       # %bb.0: # %entry59; LA32-NEXT:    addi.w $sp, $sp, -12860; LA32-NEXT:    st.w $ra, $sp, 124 # 4-byte Folded Spill61; LA32-NEXT:    st.w $fp, $sp, 120 # 4-byte Folded Spill62; LA32-NEXT:    addi.w $fp, $sp, 12863; LA32-NEXT:    bstrins.w $sp, $zero, 4, 064; LA32-NEXT:    vld $vr0, $a1, 1665; LA32-NEXT:    vst $vr0, $sp, 4866; LA32-NEXT:    ld.w $a2, $a1, 1267; LA32-NEXT:    st.w $a2, $sp, 4468; LA32-NEXT:    ld.w $a2, $a1, 869; LA32-NEXT:    st.w $a2, $sp, 4070; LA32-NEXT:    ld.w $a2, $a1, 471; LA32-NEXT:    st.w $a2, $sp, 3672; LA32-NEXT:    ld.w $a1, $a1, 073; LA32-NEXT:    st.w $a1, $sp, 3274; LA32-NEXT:    xvld $xr0, $sp, 3275; LA32-NEXT:    xvfsqrt.d $xr0, $xr076; LA32-NEXT:    xvst $xr0, $sp, 6477; LA32-NEXT:    vld $vr0, $sp, 8078; LA32-NEXT:    vst $vr0, $a0, 1679; LA32-NEXT:    ld.w $a1, $sp, 7680; LA32-NEXT:    st.w $a1, $a0, 1281; LA32-NEXT:    ld.w $a1, $sp, 7282; LA32-NEXT:    st.w $a1, $a0, 883; LA32-NEXT:    ld.w $a1, $sp, 6884; LA32-NEXT:    st.w $a1, $a0, 485; LA32-NEXT:    ld.w $a1, $sp, 6486; LA32-NEXT:    st.w $a1, $a0, 087; LA32-NEXT:    addi.w $sp, $fp, -12888; LA32-NEXT:    ld.w $fp, $sp, 120 # 4-byte Folded Reload89; LA32-NEXT:    ld.w $ra, $sp, 124 # 4-byte Folded Reload90; LA32-NEXT:    addi.w $sp, $sp, 12891; LA32-NEXT:    ret92;93; LA64-LABEL: sqrt_v4f64:94; LA64:       # %bb.0: # %entry95; LA64-NEXT:    xvld $xr0, $a1, 096; LA64-NEXT:    xvfsqrt.d $xr0, $xr097; LA64-NEXT:    xvst $xr0, $a0, 098; LA64-NEXT:    ret99entry:100  %v0 = load <4 x double>, ptr %a0, align 16101  %sqrt = call <4 x double> @llvm.sqrt.v4f64 (<4 x double> %v0)102  store <4 x double> %sqrt, ptr %res, align 16103  ret void104}105 106;; 1.0 / (fsqrt vec)107define void @one_div_sqrt_v8f32(ptr %res, ptr %a0) nounwind {108; LA32-LABEL: one_div_sqrt_v8f32:109; LA32:       # %bb.0: # %entry110; LA32-NEXT:    addi.w $sp, $sp, -128111; LA32-NEXT:    st.w $ra, $sp, 124 # 4-byte Folded Spill112; LA32-NEXT:    st.w $fp, $sp, 120 # 4-byte Folded Spill113; LA32-NEXT:    addi.w $fp, $sp, 128114; LA32-NEXT:    bstrins.w $sp, $zero, 4, 0115; LA32-NEXT:    vld $vr0, $a1, 16116; LA32-NEXT:    vst $vr0, $sp, 48117; LA32-NEXT:    ld.w $a2, $a1, 12118; LA32-NEXT:    st.w $a2, $sp, 44119; LA32-NEXT:    ld.w $a2, $a1, 8120; LA32-NEXT:    st.w $a2, $sp, 40121; LA32-NEXT:    ld.w $a2, $a1, 4122; LA32-NEXT:    st.w $a2, $sp, 36123; LA32-NEXT:    ld.w $a1, $a1, 0124; LA32-NEXT:    st.w $a1, $sp, 32125; LA32-NEXT:    xvld $xr0, $sp, 32126; LA32-NEXT:    xvfrsqrt.s $xr0, $xr0127; LA32-NEXT:    xvst $xr0, $sp, 64128; LA32-NEXT:    vld $vr0, $sp, 80129; LA32-NEXT:    vst $vr0, $a0, 16130; LA32-NEXT:    ld.w $a1, $sp, 76131; LA32-NEXT:    st.w $a1, $a0, 12132; LA32-NEXT:    ld.w $a1, $sp, 72133; LA32-NEXT:    st.w $a1, $a0, 8134; LA32-NEXT:    ld.w $a1, $sp, 68135; LA32-NEXT:    st.w $a1, $a0, 4136; LA32-NEXT:    ld.w $a1, $sp, 64137; LA32-NEXT:    st.w $a1, $a0, 0138; LA32-NEXT:    addi.w $sp, $fp, -128139; LA32-NEXT:    ld.w $fp, $sp, 120 # 4-byte Folded Reload140; LA32-NEXT:    ld.w $ra, $sp, 124 # 4-byte Folded Reload141; LA32-NEXT:    addi.w $sp, $sp, 128142; LA32-NEXT:    ret143;144; LA64-LABEL: one_div_sqrt_v8f32:145; LA64:       # %bb.0: # %entry146; LA64-NEXT:    xvld $xr0, $a1, 0147; LA64-NEXT:    xvfrsqrt.s $xr0, $xr0148; LA64-NEXT:    xvst $xr0, $a0, 0149; LA64-NEXT:    ret150entry:151  %v0 = load <8 x float>, ptr %a0, align 16152  %sqrt = call <8 x float> @llvm.sqrt.v8f32 (<8 x float> %v0)153  %div = fdiv <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>, %sqrt154  store <8 x float> %div, ptr %res, align 16155  ret void156}157 158define void @one_div_sqrt_v4f64(ptr %res, ptr %a0) nounwind {159; LA32-LABEL: one_div_sqrt_v4f64:160; LA32:       # %bb.0: # %entry161; LA32-NEXT:    addi.w $sp, $sp, -128162; LA32-NEXT:    st.w $ra, $sp, 124 # 4-byte Folded Spill163; LA32-NEXT:    st.w $fp, $sp, 120 # 4-byte Folded Spill164; LA32-NEXT:    addi.w $fp, $sp, 128165; LA32-NEXT:    bstrins.w $sp, $zero, 4, 0166; LA32-NEXT:    vld $vr0, $a1, 16167; LA32-NEXT:    vst $vr0, $sp, 48168; LA32-NEXT:    ld.w $a2, $a1, 12169; LA32-NEXT:    st.w $a2, $sp, 44170; LA32-NEXT:    ld.w $a2, $a1, 8171; LA32-NEXT:    st.w $a2, $sp, 40172; LA32-NEXT:    ld.w $a2, $a1, 4173; LA32-NEXT:    st.w $a2, $sp, 36174; LA32-NEXT:    ld.w $a1, $a1, 0175; LA32-NEXT:    st.w $a1, $sp, 32176; LA32-NEXT:    xvld $xr0, $sp, 32177; LA32-NEXT:    xvfsqrt.d $xr0, $xr0178; LA32-NEXT:    xvldi $xr1, -912179; LA32-NEXT:    xvfdiv.d $xr0, $xr1, $xr0180; LA32-NEXT:    xvst $xr0, $sp, 64181; LA32-NEXT:    vld $vr0, $sp, 80182; LA32-NEXT:    vst $vr0, $a0, 16183; LA32-NEXT:    ld.w $a1, $sp, 76184; LA32-NEXT:    st.w $a1, $a0, 12185; LA32-NEXT:    ld.w $a1, $sp, 72186; LA32-NEXT:    st.w $a1, $a0, 8187; LA32-NEXT:    ld.w $a1, $sp, 68188; LA32-NEXT:    st.w $a1, $a0, 4189; LA32-NEXT:    ld.w $a1, $sp, 64190; LA32-NEXT:    st.w $a1, $a0, 0191; LA32-NEXT:    addi.w $sp, $fp, -128192; LA32-NEXT:    ld.w $fp, $sp, 120 # 4-byte Folded Reload193; LA32-NEXT:    ld.w $ra, $sp, 124 # 4-byte Folded Reload194; LA32-NEXT:    addi.w $sp, $sp, 128195; LA32-NEXT:    ret196;197; LA64-LABEL: one_div_sqrt_v4f64:198; LA64:       # %bb.0: # %entry199; LA64-NEXT:    xvld $xr0, $a1, 0200; LA64-NEXT:    xvfrsqrt.d $xr0, $xr0201; LA64-NEXT:    xvst $xr0, $a0, 0202; LA64-NEXT:    ret203entry:204  %v0 = load <4 x double>, ptr %a0, align 16205  %sqrt = call <4 x double> @llvm.sqrt.v4f64 (<4 x double> %v0)206  %div = fdiv <4 x double> <double 1.0, double 1.0, double 1.0, double 1.0>, %sqrt207  store <4 x double> %div, ptr %res, align 16208  ret void209}210 211declare <8 x float> @llvm.sqrt.v8f32(<8 x float>)212declare <4 x double> @llvm.sqrt.v4f64(<4 x double>)213