198 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;; xvinsve0.w6define void @xvinsve0_v8i32_l_0(ptr %d, ptr %a, ptr %b) nounwind {7; CHECK-LABEL: xvinsve0_v8i32_l_0:8; CHECK: # %bb.0: # %entry9; CHECK-NEXT: xvld $xr0, $a1, 010; CHECK-NEXT: xvld $xr1, $a2, 011; CHECK-NEXT: xvinsve0.w $xr0, $xr1, 012; CHECK-NEXT: xvst $xr0, $a0, 013; CHECK-NEXT: ret14entry:15 %va = load <8 x i32>, ptr %a16 %vb = load <8 x i32>, ptr %b17 %vc = shufflevector <8 x i32> %va, <8 x i32> %vb, <8 x i32> <i32 8, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>18 store <8 x i32> %vc, ptr %d19 ret void20}21 22define void @xvinsve0_v8i32_l_4(ptr %d, ptr %a, ptr %b) nounwind {23; CHECK-LABEL: xvinsve0_v8i32_l_4:24; CHECK: # %bb.0: # %entry25; CHECK-NEXT: xvld $xr0, $a1, 026; CHECK-NEXT: xvld $xr1, $a2, 027; CHECK-NEXT: xvinsve0.w $xr0, $xr1, 428; CHECK-NEXT: xvst $xr0, $a0, 029; CHECK-NEXT: ret30entry:31 %va = load <8 x i32>, ptr %a32 %vb = load <8 x i32>, ptr %b33 %vc = shufflevector <8 x i32> %va, <8 x i32> %vb, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 5, i32 6, i32 7>34 store <8 x i32> %vc, ptr %d35 ret void36}37 38define void @xvinsve0_v8f32_l(ptr %d, ptr %a, ptr %b) nounwind {39; CHECK-LABEL: xvinsve0_v8f32_l:40; CHECK: # %bb.0: # %entry41; CHECK-NEXT: xvld $xr0, $a1, 042; CHECK-NEXT: xvld $xr1, $a2, 043; CHECK-NEXT: xvinsve0.w $xr0, $xr1, 044; CHECK-NEXT: xvst $xr0, $a0, 045; CHECK-NEXT: ret46entry:47 %va = load <8 x float>, ptr %a48 %vb = load <8 x float>, ptr %b49 %vc = shufflevector <8 x float> %va, <8 x float> %vb, <8 x i32> <i32 8, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>50 store <8 x float> %vc, ptr %d51 ret void52}53 54define void @xvinsve0_v8i32_h_1(ptr %d, ptr %a, ptr %b) nounwind {55; CHECK-LABEL: xvinsve0_v8i32_h_1:56; CHECK: # %bb.0: # %entry57; CHECK-NEXT: xvld $xr0, $a1, 058; CHECK-NEXT: xvld $xr1, $a2, 059; CHECK-NEXT: xvinsve0.w $xr1, $xr0, 160; CHECK-NEXT: xvst $xr1, $a0, 061; CHECK-NEXT: ret62entry:63 %va = load <8 x i32>, ptr %a64 %vb = load <8 x i32>, ptr %b65 %vc = shufflevector <8 x i32> %va, <8 x i32> %vb, <8 x i32> <i32 8, i32 0, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>66 store <8 x i32> %vc, ptr %d67 ret void68}69 70define void @xvinsve0_v8i32_h_6(ptr %d, ptr %a, ptr %b) nounwind {71; CHECK-LABEL: xvinsve0_v8i32_h_6:72; CHECK: # %bb.0: # %entry73; CHECK-NEXT: xvld $xr0, $a1, 074; CHECK-NEXT: xvld $xr1, $a2, 075; CHECK-NEXT: xvinsve0.w $xr1, $xr0, 676; CHECK-NEXT: xvst $xr1, $a0, 077; CHECK-NEXT: ret78entry:79 %va = load <8 x i32>, ptr %a80 %vb = load <8 x i32>, ptr %b81 %vc = shufflevector <8 x i32> %va, <8 x i32> %vb, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 0, i32 15>82 store <8 x i32> %vc, ptr %d83 ret void84}85 86define void @xvinsve0_v8f32_h(ptr %d, ptr %a, ptr %b) nounwind {87; CHECK-LABEL: xvinsve0_v8f32_h:88; CHECK: # %bb.0: # %entry89; CHECK-NEXT: xvld $xr0, $a1, 090; CHECK-NEXT: xvld $xr1, $a2, 091; CHECK-NEXT: xvinsve0.w $xr1, $xr0, 092; CHECK-NEXT: xvst $xr1, $a0, 093; CHECK-NEXT: ret94entry:95 %va = load <8 x float>, ptr %a96 %vb = load <8 x float>, ptr %b97 %vc = shufflevector <8 x float> %va, <8 x float> %vb, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>98 store <8 x float> %vc, ptr %d99 ret void100}101 102;; xvinsve0.d103define void @xvinsve0_v4i64_l_1(ptr %d, ptr %a, ptr %b) nounwind {104; CHECK-LABEL: xvinsve0_v4i64_l_1:105; CHECK: # %bb.0: # %entry106; CHECK-NEXT: xvld $xr0, $a1, 0107; CHECK-NEXT: xvld $xr1, $a2, 0108; CHECK-NEXT: xvinsve0.d $xr0, $xr1, 1109; CHECK-NEXT: xvst $xr0, $a0, 0110; CHECK-NEXT: ret111entry:112 %va = load <4 x i64>, ptr %a113 %vb = load <4 x i64>, ptr %b114 %vc = shufflevector <4 x i64> %va, <4 x i64> %vb, <4 x i32> <i32 0, i32 4, i32 2, i32 3>115 store <4 x i64> %vc, ptr %d116 ret void117}118 119define void @xvinsve0_v4i64_l_2(ptr %d, ptr %a, ptr %b) nounwind {120; CHECK-LABEL: xvinsve0_v4i64_l_2:121; CHECK: # %bb.0: # %entry122; CHECK-NEXT: xvld $xr0, $a1, 0123; CHECK-NEXT: xvld $xr1, $a2, 0124; CHECK-NEXT: xvinsve0.d $xr0, $xr1, 2125; CHECK-NEXT: xvst $xr0, $a0, 0126; CHECK-NEXT: ret127entry:128 %va = load <4 x i64>, ptr %a129 %vb = load <4 x i64>, ptr %b130 %vc = shufflevector <4 x i64> %va, <4 x i64> %vb, <4 x i32> <i32 0, i32 1, i32 4, i32 3>131 store <4 x i64> %vc, ptr %d132 ret void133}134 135define void @xvinsve0_v4f64_l(ptr %d, ptr %a, ptr %b) nounwind {136; CHECK-LABEL: xvinsve0_v4f64_l:137; CHECK: # %bb.0: # %entry138; CHECK-NEXT: xvld $xr0, $a1, 0139; CHECK-NEXT: xvld $xr1, $a2, 0140; CHECK-NEXT: xvinsve0.d $xr0, $xr1, 0141; CHECK-NEXT: xvst $xr0, $a0, 0142; CHECK-NEXT: ret143entry:144 %va = load <4 x double>, ptr %a145 %vb = load <4 x double>, ptr %b146 %vc = shufflevector <4 x double> %va, <4 x double> %vb, <4 x i32> <i32 4, i32 1, i32 2, i32 3>147 store <4 x double> %vc, ptr %d148 ret void149}150 151define void @xvinsve0_v4i64_h_0(ptr %d, ptr %a, ptr %b) nounwind {152; CHECK-LABEL: xvinsve0_v4i64_h_0:153; CHECK: # %bb.0: # %entry154; CHECK-NEXT: xvld $xr0, $a1, 0155; CHECK-NEXT: xvld $xr1, $a2, 0156; CHECK-NEXT: xvinsve0.d $xr1, $xr0, 0157; CHECK-NEXT: xvst $xr1, $a0, 0158; CHECK-NEXT: ret159entry:160 %va = load <4 x i64>, ptr %a161 %vb = load <4 x i64>, ptr %b162 %vc = shufflevector <4 x i64> %va, <4 x i64> %vb, <4 x i32> <i32 0, i32 5, i32 6, i32 7>163 store <4 x i64> %vc, ptr %d164 ret void165}166 167define void @xvinsve0_v4i64_h_2(ptr %d, ptr %a, ptr %b) nounwind {168; CHECK-LABEL: xvinsve0_v4i64_h_2:169; CHECK: # %bb.0: # %entry170; CHECK-NEXT: xvld $xr0, $a1, 0171; CHECK-NEXT: xvld $xr1, $a2, 0172; CHECK-NEXT: xvinsve0.d $xr1, $xr0, 2173; CHECK-NEXT: xvst $xr1, $a0, 0174; CHECK-NEXT: ret175entry:176 %va = load <4 x i64>, ptr %a177 %vb = load <4 x i64>, ptr %b178 %vc = shufflevector <4 x i64> %va, <4 x i64> %vb, <4 x i32> <i32 4, i32 5, i32 0, i32 7>179 store <4 x i64> %vc, ptr %d180 ret void181}182 183define void @xvinsve0_v4f64_h(ptr %d, ptr %a, ptr %b) nounwind {184; CHECK-LABEL: xvinsve0_v4f64_h:185; CHECK: # %bb.0: # %entry186; CHECK-NEXT: xvld $xr0, $a1, 0187; CHECK-NEXT: xvld $xr1, $a2, 0188; CHECK-NEXT: xvinsve0.d $xr1, $xr0, 0189; CHECK-NEXT: xvst $xr1, $a0, 0190; CHECK-NEXT: ret191entry:192 %va = load <4 x double>, ptr %a193 %vb = load <4 x double>, ptr %b194 %vc = shufflevector <4 x double> %va, <4 x double> %vb, <4 x i32> <i32 0, i32 5, i32 6, i32 7>195 store <4 x double> %vc, ptr %d196 ret void197}198