180 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s | FileCheck %s3; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s4 5define void @lshr_v32i8(ptr %res, ptr %a0, ptr %a1) nounwind {6; CHECK-LABEL: lshr_v32i8:7; CHECK: # %bb.0: # %entry8; CHECK-NEXT: xvld $xr0, $a1, 09; CHECK-NEXT: xvld $xr1, $a2, 010; CHECK-NEXT: xvsrl.b $xr0, $xr0, $xr111; CHECK-NEXT: xvst $xr0, $a0, 012; CHECK-NEXT: ret13entry:14 %v0 = load <32 x i8>, ptr %a015 %v1 = load <32 x i8>, ptr %a116 %v2 = lshr <32 x i8> %v0, %v117 store <32 x i8> %v2, ptr %res18 ret void19}20 21define void @lshr_v16i16(ptr %res, ptr %a0, ptr %a1) nounwind {22; CHECK-LABEL: lshr_v16i16:23; CHECK: # %bb.0: # %entry24; CHECK-NEXT: xvld $xr0, $a1, 025; CHECK-NEXT: xvld $xr1, $a2, 026; CHECK-NEXT: xvsrl.h $xr0, $xr0, $xr127; CHECK-NEXT: xvst $xr0, $a0, 028; CHECK-NEXT: ret29entry:30 %v0 = load <16 x i16>, ptr %a031 %v1 = load <16 x i16>, ptr %a132 %v2 = lshr <16 x i16> %v0, %v133 store <16 x i16> %v2, ptr %res34 ret void35}36 37define void @lshr_v8i32(ptr %res, ptr %a0, ptr %a1) nounwind {38; CHECK-LABEL: lshr_v8i32:39; CHECK: # %bb.0: # %entry40; CHECK-NEXT: xvld $xr0, $a1, 041; CHECK-NEXT: xvld $xr1, $a2, 042; CHECK-NEXT: xvsrl.w $xr0, $xr0, $xr143; CHECK-NEXT: xvst $xr0, $a0, 044; CHECK-NEXT: ret45entry:46 %v0 = load <8 x i32>, ptr %a047 %v1 = load <8 x i32>, ptr %a148 %v2 = lshr <8 x i32> %v0, %v149 store <8 x i32> %v2, ptr %res50 ret void51}52 53define void @lshr_v4i64(ptr %res, ptr %a0, ptr %a1) nounwind {54; CHECK-LABEL: lshr_v4i64:55; CHECK: # %bb.0: # %entry56; CHECK-NEXT: xvld $xr0, $a1, 057; CHECK-NEXT: xvld $xr1, $a2, 058; CHECK-NEXT: xvsrl.d $xr0, $xr0, $xr159; CHECK-NEXT: xvst $xr0, $a0, 060; CHECK-NEXT: ret61entry:62 %v0 = load <4 x i64>, ptr %a063 %v1 = load <4 x i64>, ptr %a164 %v2 = lshr <4 x i64> %v0, %v165 store <4 x i64> %v2, ptr %res66 ret void67}68 69define void @lshr_v32i8_1(ptr %res, ptr %a0) nounwind {70; CHECK-LABEL: lshr_v32i8_1:71; CHECK: # %bb.0: # %entry72; CHECK-NEXT: xvld $xr0, $a1, 073; CHECK-NEXT: xvsrli.b $xr0, $xr0, 174; CHECK-NEXT: xvst $xr0, $a0, 075; CHECK-NEXT: ret76entry:77 %v0 = load <32 x i8>, ptr %a078 %v1 = lshr <32 x i8> %v0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>79 store <32 x i8> %v1, ptr %res80 ret void81}82 83define void @lshr_v32i8_7(ptr %res, ptr %a0) nounwind {84; CHECK-LABEL: lshr_v32i8_7:85; CHECK: # %bb.0: # %entry86; CHECK-NEXT: xvld $xr0, $a1, 087; CHECK-NEXT: xvsrli.b $xr0, $xr0, 788; CHECK-NEXT: xvst $xr0, $a0, 089; CHECK-NEXT: ret90entry:91 %v0 = load <32 x i8>, ptr %a092 %v1 = lshr <32 x i8> %v0, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>93 store <32 x i8> %v1, ptr %res94 ret void95}96 97define void @lshr_v16i16_1(ptr %res, ptr %a0) nounwind {98; CHECK-LABEL: lshr_v16i16_1:99; CHECK: # %bb.0: # %entry100; CHECK-NEXT: xvld $xr0, $a1, 0101; CHECK-NEXT: xvsrli.h $xr0, $xr0, 1102; CHECK-NEXT: xvst $xr0, $a0, 0103; CHECK-NEXT: ret104entry:105 %v0 = load <16 x i16>, ptr %a0106 %v1 = lshr <16 x i16> %v0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>107 store <16 x i16> %v1, ptr %res108 ret void109}110 111define void @lshr_v16i16_15(ptr %res, ptr %a0) nounwind {112; CHECK-LABEL: lshr_v16i16_15:113; CHECK: # %bb.0: # %entry114; CHECK-NEXT: xvld $xr0, $a1, 0115; CHECK-NEXT: xvsrli.h $xr0, $xr0, 15116; CHECK-NEXT: xvst $xr0, $a0, 0117; CHECK-NEXT: ret118entry:119 %v0 = load <16 x i16>, ptr %a0120 %v1 = lshr <16 x i16> %v0, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>121 store <16 x i16> %v1, ptr %res122 ret void123}124 125define void @lshr_v8i32_1(ptr %res, ptr %a0) nounwind {126; CHECK-LABEL: lshr_v8i32_1:127; CHECK: # %bb.0: # %entry128; CHECK-NEXT: xvld $xr0, $a1, 0129; CHECK-NEXT: xvsrli.w $xr0, $xr0, 1130; CHECK-NEXT: xvst $xr0, $a0, 0131; CHECK-NEXT: ret132entry:133 %v0 = load <8 x i32>, ptr %a0134 %v1 = lshr <8 x i32> %v0, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>135 store <8 x i32> %v1, ptr %res136 ret void137}138 139define void @lshr_v8i32_31(ptr %res, ptr %a0) nounwind {140; CHECK-LABEL: lshr_v8i32_31:141; CHECK: # %bb.0: # %entry142; CHECK-NEXT: xvld $xr0, $a1, 0143; CHECK-NEXT: xvsrli.w $xr0, $xr0, 31144; CHECK-NEXT: xvst $xr0, $a0, 0145; CHECK-NEXT: ret146entry:147 %v0 = load <8 x i32>, ptr %a0148 %v1 = lshr <8 x i32> %v0, <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31>149 store <8 x i32> %v1, ptr %res150 ret void151}152 153define void @lshr_v4i64_1(ptr %res, ptr %a0) nounwind {154; CHECK-LABEL: lshr_v4i64_1:155; CHECK: # %bb.0: # %entry156; CHECK-NEXT: xvld $xr0, $a1, 0157; CHECK-NEXT: xvsrli.d $xr0, $xr0, 1158; CHECK-NEXT: xvst $xr0, $a0, 0159; CHECK-NEXT: ret160entry:161 %v0 = load <4 x i64>, ptr %a0162 %v1 = lshr <4 x i64> %v0, <i64 1, i64 1, i64 1, i64 1>163 store <4 x i64> %v1, ptr %res164 ret void165}166 167define void @lshr_v4i64_63(ptr %res, ptr %a0) nounwind {168; CHECK-LABEL: lshr_v4i64_63:169; CHECK: # %bb.0: # %entry170; CHECK-NEXT: xvld $xr0, $a1, 0171; CHECK-NEXT: xvsrli.d $xr0, $xr0, 63172; CHECK-NEXT: xvst $xr0, $a0, 0173; CHECK-NEXT: ret174entry:175 %v0 = load <4 x i64>, ptr %a0176 %v1 = lshr <4 x i64> %v0, <i64 63, i64 63, i64 63, i64 63>177 store <4 x i64> %v1, ptr %res178 ret void179}180