brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · b3155c9 Raw
180 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s | FileCheck %s3; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s4 5define void @ctpop_v32i8(ptr %src, ptr %dst) nounwind {6; CHECK-LABEL: ctpop_v32i8:7; CHECK:       # %bb.0:8; CHECK-NEXT:    xvld $xr0, $a0, 09; CHECK-NEXT:    xvpcnt.b $xr0, $xr010; CHECK-NEXT:    xvst $xr0, $a1, 011; CHECK-NEXT:    ret12  %v = load <32 x i8>, ptr %src13  %res = call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %v)14  store <32 x i8> %res, ptr %dst15  ret void16}17 18define void @ctpop_v16i16(ptr %src, ptr %dst) nounwind {19; CHECK-LABEL: ctpop_v16i16:20; CHECK:       # %bb.0:21; CHECK-NEXT:    xvld $xr0, $a0, 022; CHECK-NEXT:    xvpcnt.h $xr0, $xr023; CHECK-NEXT:    xvst $xr0, $a1, 024; CHECK-NEXT:    ret25  %v = load <16 x i16>, ptr %src26  %res = call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %v)27  store <16 x i16> %res, ptr %dst28  ret void29}30 31define void @ctpop_v8i32(ptr %src, ptr %dst) nounwind {32; CHECK-LABEL: ctpop_v8i32:33; CHECK:       # %bb.0:34; CHECK-NEXT:    xvld $xr0, $a0, 035; CHECK-NEXT:    xvpcnt.w $xr0, $xr036; CHECK-NEXT:    xvst $xr0, $a1, 037; CHECK-NEXT:    ret38  %v = load <8 x i32>, ptr %src39  %res = call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %v)40  store <8 x i32> %res, ptr %dst41  ret void42}43 44define void @ctpop_v4i64(ptr %src, ptr %dst) nounwind {45; CHECK-LABEL: ctpop_v4i64:46; CHECK:       # %bb.0:47; CHECK-NEXT:    xvld $xr0, $a0, 048; CHECK-NEXT:    xvpcnt.d $xr0, $xr049; CHECK-NEXT:    xvst $xr0, $a1, 050; CHECK-NEXT:    ret51  %v = load <4 x i64>, ptr %src52  %res = call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %v)53  store <4 x i64> %res, ptr %dst54  ret void55}56 57define void @ctlz_v32i8(ptr %src, ptr %dst) nounwind {58; CHECK-LABEL: ctlz_v32i8:59; CHECK:       # %bb.0:60; CHECK-NEXT:    xvld $xr0, $a0, 061; CHECK-NEXT:    xvclz.b $xr0, $xr062; CHECK-NEXT:    xvst $xr0, $a1, 063; CHECK-NEXT:    ret64  %v = load <32 x i8>, ptr %src65  %res = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %v, i1 false)66  store <32 x i8> %res, ptr %dst67  ret void68}69 70define void @ctlz_v16i16(ptr %src, ptr %dst) nounwind {71; CHECK-LABEL: ctlz_v16i16:72; CHECK:       # %bb.0:73; CHECK-NEXT:    xvld $xr0, $a0, 074; CHECK-NEXT:    xvclz.h $xr0, $xr075; CHECK-NEXT:    xvst $xr0, $a1, 076; CHECK-NEXT:    ret77  %v = load <16 x i16>, ptr %src78  %res = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %v, i1 false)79  store <16 x i16> %res, ptr %dst80  ret void81}82 83define void @ctlz_v8i32(ptr %src, ptr %dst) nounwind {84; CHECK-LABEL: ctlz_v8i32:85; CHECK:       # %bb.0:86; CHECK-NEXT:    xvld $xr0, $a0, 087; CHECK-NEXT:    xvclz.w $xr0, $xr088; CHECK-NEXT:    xvst $xr0, $a1, 089; CHECK-NEXT:    ret90  %v = load <8 x i32>, ptr %src91  %res = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %v, i1 false)92  store <8 x i32> %res, ptr %dst93  ret void94}95 96define void @ctlz_v4i64(ptr %src, ptr %dst) nounwind {97; CHECK-LABEL: ctlz_v4i64:98; CHECK:       # %bb.0:99; CHECK-NEXT:    xvld $xr0, $a0, 0100; CHECK-NEXT:    xvclz.d $xr0, $xr0101; CHECK-NEXT:    xvst $xr0, $a1, 0102; CHECK-NEXT:    ret103  %v = load <4 x i64>, ptr %src104  %res = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %v, i1 false)105  store <4 x i64> %res, ptr %dst106  ret void107}108 109define void @not_ctlz_v32i8(ptr %src, ptr %dst) nounwind {110; CHECK-LABEL: not_ctlz_v32i8:111; CHECK:       # %bb.0:112; CHECK-NEXT:    xvld $xr0, $a0, 0113; CHECK-NEXT:    xvxori.b $xr0, $xr0, 255114; CHECK-NEXT:    xvclz.b $xr0, $xr0115; CHECK-NEXT:    xvst $xr0, $a1, 0116; CHECK-NEXT:    ret117  %v = load <32 x i8>, ptr %src118  %neg = xor <32 x i8> %v, <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>119  %res = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %neg, i1 false)120  store <32 x i8> %res, ptr %dst121  ret void122}123 124define void @not_ctlz_v16i16(ptr %src, ptr %dst) nounwind {125; CHECK-LABEL: not_ctlz_v16i16:126; CHECK:       # %bb.0:127; CHECK-NEXT:    xvld $xr0, $a0, 0128; CHECK-NEXT:    xvrepli.b $xr1, -1129; CHECK-NEXT:    xvxor.v $xr0, $xr0, $xr1130; CHECK-NEXT:    xvclz.h $xr0, $xr0131; CHECK-NEXT:    xvst $xr0, $a1, 0132; CHECK-NEXT:    ret133  %v = load <16 x i16>, ptr %src134  %neg = xor <16 x i16> %v, <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>135  %res = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %neg, i1 false)136  store <16 x i16> %res, ptr %dst137  ret void138}139 140define void @not_ctlz_v8i32(ptr %src, ptr %dst) nounwind {141; CHECK-LABEL: not_ctlz_v8i32:142; CHECK:       # %bb.0:143; CHECK-NEXT:    xvld $xr0, $a0, 0144; CHECK-NEXT:    xvrepli.b $xr1, -1145; CHECK-NEXT:    xvxor.v $xr0, $xr0, $xr1146; CHECK-NEXT:    xvclz.w $xr0, $xr0147; CHECK-NEXT:    xvst $xr0, $a1, 0148; CHECK-NEXT:    ret149  %v = load <8 x i32>, ptr %src150  %neg = xor <8 x i32> %v, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>151  %res = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %neg, i1 false)152  store <8 x i32> %res, ptr %dst153  ret void154}155 156define void @not_ctlz_v4i64(ptr %src, ptr %dst) nounwind {157; CHECK-LABEL: not_ctlz_v4i64:158; CHECK:       # %bb.0:159; CHECK-NEXT:    xvld $xr0, $a0, 0160; CHECK-NEXT:    xvrepli.b $xr1, -1161; CHECK-NEXT:    xvxor.v $xr0, $xr0, $xr1162; CHECK-NEXT:    xvclz.d $xr0, $xr0163; CHECK-NEXT:    xvst $xr0, $a1, 0164; CHECK-NEXT:    ret165  %v = load <4 x i64>, ptr %src166  %neg = xor <4 x i64> %v, <i64 -1, i64 -1, i64 -1, i64 -1>167  %res = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %neg, i1 false)168  store <4 x i64> %res, ptr %dst169  ret void170}171 172declare <32 x i8> @llvm.ctpop.v32i8(<32 x i8>)173declare <16 x i16> @llvm.ctpop.v16i16(<16 x i16>)174declare <8 x i32> @llvm.ctpop.v8i32(<8 x i32>)175declare <4 x i64> @llvm.ctpop.v4i64(<4 x i64>)176declare <32 x i8> @llvm.ctlz.v32i8(<32 x i8>, i1)177declare <16 x i16> @llvm.ctlz.v16i16(<16 x i16>, i1)178declare <8 x i32> @llvm.ctlz.v8i32(<8 x i32>, i1)179declare <4 x i64> @llvm.ctlz.v4i64(<4 x i64>, i1)180