brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.8 KiB · 314350a Raw
246 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx %s -o - | FileCheck %s --check-prefix=LA323; RUN: llc --mtriple=loongarch64 --mattr=+lsx %s -o - | FileCheck %s --check-prefix=LA644 5define void @load_trunc_2i64_to_2i32(ptr %ptr, ptr %dst) nounwind {6; LA32-LABEL: load_trunc_2i64_to_2i32:7; LA32:       # %bb.0:8; LA32-NEXT:    vld $vr0, $a0, 09; LA32-NEXT:    vpickve2gr.w $a0, $vr0, 210; LA32-NEXT:    st.w $a0, $a1, 411; LA32-NEXT:    vpickve2gr.w $a0, $vr0, 012; LA32-NEXT:    st.w $a0, $a1, 013; LA32-NEXT:    ret14;15; LA64-LABEL: load_trunc_2i64_to_2i32:16; LA64:       # %bb.0:17; LA64-NEXT:    vld $vr0, $a0, 018; LA64-NEXT:    vshuf4i.w $vr0, $vr0, 819; LA64-NEXT:    vstelm.d $vr0, $a1, 0, 020; LA64-NEXT:    ret21  %a = load <2 x i64>, ptr %ptr22  %trunc = trunc <2 x i64> %a to <2 x i32>23  store <2 x i32> %trunc, ptr %dst24  ret void25}26 27define void @load_trunc_2i64_to_2i16(ptr %ptr, ptr %dst) nounwind {28; LA32-LABEL: load_trunc_2i64_to_2i16:29; LA32:       # %bb.0:30; LA32-NEXT:    vld $vr0, $a0, 031; LA32-NEXT:    pcalau12i $a0, %pc_hi20(.LCPI1_0)32; LA32-NEXT:    vld $vr1, $a0, %pc_lo12(.LCPI1_0)33; LA32-NEXT:    vshuf.h $vr1, $vr0, $vr034; LA32-NEXT:    vpickve2gr.w $a0, $vr1, 035; LA32-NEXT:    st.w $a0, $a1, 036; LA32-NEXT:    ret37;38; LA64-LABEL: load_trunc_2i64_to_2i16:39; LA64:       # %bb.0:40; LA64-NEXT:    vld $vr0, $a0, 041; LA64-NEXT:    pcalau12i $a0, %pc_hi20(.LCPI1_0)42; LA64-NEXT:    vld $vr1, $a0, %pc_lo12(.LCPI1_0)43; LA64-NEXT:    vshuf.h $vr1, $vr0, $vr044; LA64-NEXT:    vstelm.w $vr1, $a1, 0, 045; LA64-NEXT:    ret46  %a = load <2 x i64>, ptr %ptr47  %trunc = trunc <2 x i64> %a to <2 x i16>48  store <2 x i16> %trunc, ptr %dst49  ret void50}51 52define void @load_trunc_2i64_to_2i8(ptr %ptr, ptr %dst) nounwind {53; LA32-LABEL: load_trunc_2i64_to_2i8:54; LA32:       # %bb.0:55; LA32-NEXT:    vld $vr0, $a0, 056; LA32-NEXT:    pcalau12i $a0, %pc_hi20(.LCPI2_0)57; LA32-NEXT:    vld $vr1, $a0, %pc_lo12(.LCPI2_0)58; LA32-NEXT:    vshuf.b $vr0, $vr0, $vr0, $vr159; LA32-NEXT:    vstelm.h $vr0, $a1, 0, 060; LA32-NEXT:    ret61;62; LA64-LABEL: load_trunc_2i64_to_2i8:63; LA64:       # %bb.0:64; LA64-NEXT:    vld $vr0, $a0, 065; LA64-NEXT:    pcalau12i $a0, %pc_hi20(.LCPI2_0)66; LA64-NEXT:    vld $vr1, $a0, %pc_lo12(.LCPI2_0)67; LA64-NEXT:    vshuf.b $vr0, $vr0, $vr0, $vr168; LA64-NEXT:    vstelm.h $vr0, $a1, 0, 069; LA64-NEXT:    ret70  %a = load <2 x i64>, ptr %ptr71  %trunc = trunc <2 x i64> %a to <2 x i8>72  store <2 x i8> %trunc, ptr %dst73  ret void74}75 76define void @load_trunc_4i32_to_4i16(ptr %ptr, ptr %dst) nounwind {77; LA32-LABEL: load_trunc_4i32_to_4i16:78; LA32:       # %bb.0:79; LA32-NEXT:    vld $vr0, $a0, 080; LA32-NEXT:    vpickev.h $vr0, $vr0, $vr081; LA32-NEXT:    vpickve2gr.w $a0, $vr0, 182; LA32-NEXT:    st.w $a0, $a1, 483; LA32-NEXT:    vpickve2gr.w $a0, $vr0, 084; LA32-NEXT:    st.w $a0, $a1, 085; LA32-NEXT:    ret86;87; LA64-LABEL: load_trunc_4i32_to_4i16:88; LA64:       # %bb.0:89; LA64-NEXT:    vld $vr0, $a0, 090; LA64-NEXT:    vpickev.h $vr0, $vr0, $vr091; LA64-NEXT:    vstelm.d $vr0, $a1, 0, 092; LA64-NEXT:    ret93  %a = load <4 x i32>, ptr %ptr94  %trunc = trunc <4 x i32> %a to <4 x i16>95  store <4 x i16> %trunc, ptr %dst96  ret void97}98 99define void @load_trunc_4i32_to_4i8(ptr %ptr, ptr %dst) nounwind {100; LA32-LABEL: load_trunc_4i32_to_4i8:101; LA32:       # %bb.0:102; LA32-NEXT:    vld $vr0, $a0, 0103; LA32-NEXT:    pcalau12i $a0, %pc_hi20(.LCPI4_0)104; LA32-NEXT:    vld $vr1, $a0, %pc_lo12(.LCPI4_0)105; LA32-NEXT:    vshuf.b $vr0, $vr0, $vr0, $vr1106; LA32-NEXT:    vpickve2gr.w $a0, $vr0, 0107; LA32-NEXT:    st.w $a0, $a1, 0108; LA32-NEXT:    ret109;110; LA64-LABEL: load_trunc_4i32_to_4i8:111; LA64:       # %bb.0:112; LA64-NEXT:    vld $vr0, $a0, 0113; LA64-NEXT:    pcalau12i $a0, %pc_hi20(.LCPI4_0)114; LA64-NEXT:    vld $vr1, $a0, %pc_lo12(.LCPI4_0)115; LA64-NEXT:    vshuf.b $vr0, $vr0, $vr0, $vr1116; LA64-NEXT:    vstelm.w $vr0, $a1, 0, 0117; LA64-NEXT:    ret118  %a = load <4 x i32>, ptr %ptr119  %trunc = trunc <4 x i32> %a to <4 x i8>120  store <4 x i8> %trunc, ptr %dst121  ret void122}123 124define void @load_trunc_8i16_to_8i8(ptr %ptr, ptr %dst) nounwind {125; LA32-LABEL: load_trunc_8i16_to_8i8:126; LA32:       # %bb.0:127; LA32-NEXT:    vld $vr0, $a0, 0128; LA32-NEXT:    vpickev.b $vr0, $vr0, $vr0129; LA32-NEXT:    vpickve2gr.w $a0, $vr0, 1130; LA32-NEXT:    st.w $a0, $a1, 4131; LA32-NEXT:    vpickve2gr.w $a0, $vr0, 0132; LA32-NEXT:    st.w $a0, $a1, 0133; LA32-NEXT:    ret134;135; LA64-LABEL: load_trunc_8i16_to_8i8:136; LA64:       # %bb.0:137; LA64-NEXT:    vld $vr0, $a0, 0138; LA64-NEXT:    vpickev.b $vr0, $vr0, $vr0139; LA64-NEXT:    vstelm.d $vr0, $a1, 0, 0140; LA64-NEXT:    ret141  %a = load <8 x i16>, ptr %ptr142  %trunc = trunc <8 x i16> %a to <8 x i8>143  store <8 x i8> %trunc, ptr %dst144  ret void145}146 147define void @load_trunc_2i32_to_2i16(ptr %ptr, ptr %dst) nounwind {148; LA32-LABEL: load_trunc_2i32_to_2i16:149; LA32:       # %bb.0:150; LA32-NEXT:    ld.w $a2, $a0, 0151; LA32-NEXT:    ld.w $a0, $a0, 4152; LA32-NEXT:    vinsgr2vr.w $vr0, $a2, 0153; LA32-NEXT:    vinsgr2vr.w $vr0, $a0, 1154; LA32-NEXT:    vshuf4i.h $vr0, $vr0, 8155; LA32-NEXT:    vpickve2gr.w $a0, $vr0, 0156; LA32-NEXT:    st.w $a0, $a1, 0157; LA32-NEXT:    ret158;159; LA64-LABEL: load_trunc_2i32_to_2i16:160; LA64:       # %bb.0:161; LA64-NEXT:    ld.d $a0, $a0, 0162; LA64-NEXT:    vinsgr2vr.d $vr0, $a0, 0163; LA64-NEXT:    vshuf4i.h $vr0, $vr0, 8164; LA64-NEXT:    vstelm.w $vr0, $a1, 0, 0165; LA64-NEXT:    ret166  %a = load <2 x i32>, ptr %ptr167  %trunc = trunc <2 x i32> %a to <2 x i16>168  store <2 x i16> %trunc, ptr %dst169  ret void170}171 172define void @load_trunc_2i32_to_2i8(ptr %ptr, ptr %dst) nounwind {173; LA32-LABEL: load_trunc_2i32_to_2i8:174; LA32:       # %bb.0:175; LA32-NEXT:    ld.w $a2, $a0, 0176; LA32-NEXT:    ld.w $a0, $a0, 4177; LA32-NEXT:    pcalau12i $a3, %pc_hi20(.LCPI7_0)178; LA32-NEXT:    vld $vr0, $a3, %pc_lo12(.LCPI7_0)179; LA32-NEXT:    vinsgr2vr.w $vr1, $a2, 0180; LA32-NEXT:    vinsgr2vr.w $vr1, $a0, 1181; LA32-NEXT:    vshuf.b $vr0, $vr0, $vr1, $vr0182; LA32-NEXT:    vstelm.h $vr0, $a1, 0, 0183; LA32-NEXT:    ret184;185; LA64-LABEL: load_trunc_2i32_to_2i8:186; LA64:       # %bb.0:187; LA64-NEXT:    ld.d $a0, $a0, 0188; LA64-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI7_0)189; LA64-NEXT:    vld $vr0, $a2, %pc_lo12(.LCPI7_0)190; LA64-NEXT:    vinsgr2vr.d $vr1, $a0, 0191; LA64-NEXT:    vshuf.b $vr0, $vr0, $vr1, $vr0192; LA64-NEXT:    vstelm.h $vr0, $a1, 0, 0193; LA64-NEXT:    ret194  %a = load <2 x i32>, ptr %ptr195  %trunc = trunc <2 x i32> %a to <2 x i8>196  store <2 x i8> %trunc, ptr %dst197  ret void198}199 200define void @load_trunc_4i16_to_4i8(ptr %ptr, ptr %dst) nounwind {201; LA32-LABEL: load_trunc_4i16_to_4i8:202; LA32:       # %bb.0:203; LA32-NEXT:    ld.w $a2, $a0, 0204; LA32-NEXT:    ld.w $a0, $a0, 4205; LA32-NEXT:    vinsgr2vr.w $vr0, $a2, 0206; LA32-NEXT:    vinsgr2vr.w $vr0, $a0, 1207; LA32-NEXT:    vpickev.b $vr0, $vr0, $vr0208; LA32-NEXT:    vpickve2gr.w $a0, $vr0, 0209; LA32-NEXT:    st.w $a0, $a1, 0210; LA32-NEXT:    ret211;212; LA64-LABEL: load_trunc_4i16_to_4i8:213; LA64:       # %bb.0:214; LA64-NEXT:    ld.d $a0, $a0, 0215; LA64-NEXT:    vinsgr2vr.d $vr0, $a0, 0216; LA64-NEXT:    vpickev.b $vr0, $vr0, $vr0217; LA64-NEXT:    vstelm.w $vr0, $a1, 0, 0218; LA64-NEXT:    ret219  %a = load <4 x i16>, ptr %ptr220  %trunc = trunc <4 x i16> %a to <4 x i8>221  store <4 x i8> %trunc, ptr %dst222  ret void223}224 225define void @load_trunc_2i16_to_2i8(ptr %ptr, ptr %dst) nounwind {226; LA32-LABEL: load_trunc_2i16_to_2i8:227; LA32:       # %bb.0:228; LA32-NEXT:    ld.w $a0, $a0, 0229; LA32-NEXT:    vinsgr2vr.w $vr0, $a0, 0230; LA32-NEXT:    vshuf4i.b $vr0, $vr0, 8231; LA32-NEXT:    vstelm.h $vr0, $a1, 0, 0232; LA32-NEXT:    ret233;234; LA64-LABEL: load_trunc_2i16_to_2i8:235; LA64:       # %bb.0:236; LA64-NEXT:    ld.w $a0, $a0, 0237; LA64-NEXT:    vinsgr2vr.w $vr0, $a0, 0238; LA64-NEXT:    vshuf4i.b $vr0, $vr0, 8239; LA64-NEXT:    vstelm.h $vr0, $a1, 0, 0240; LA64-NEXT:    ret241  %a = load <2 x i16>, ptr %ptr242  %trunc = trunc <2 x i16> %a to <2 x i8>243  store <2 x i8> %trunc, ptr %dst244  ret void245}246